10 funes teis para trabalhar com datas em PHP

Trabalhar com datas em PHP quase sempre inevitvel. E para os iniciantes pode ser um pouco confuso e gerar bastante dor de cabea.

Ento, segue a uma lista bacana feita pelo site Cats Who Code de funes teis para lidar com datas.

Data atual formatada

Funo sem parmetro que retorna a data no formato desejado.

function data(){
	return date('d/m/Y', time());
}

Formatar data

O jeito mais prtico de converter uma data de um formato para o outro.

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));

Pegar o nmero da semana

Se precisar saber o nmero de uma semana, passe a data como parmetro desta funo.

function weeknumber($ddate){
	$date = new DateTime($ddate);
	return $date->format("W");
}

Converter minutos em horas

Informe os minutos que a funo retornar o valor em horas, e minutos se necessrio.

function convertToHoursMins($time, $format = '%02d:%02d') {
    if ($time < 1) {
        return;
    }
    $hours = floor($time / 60);
    $minutes = ($time % 60);
    return sprintf($format, $hours, $minutes);
}

Diferena entre duas datas

Esta funo retorna a diferena de tempo entre duas datas em horas e minutos.

function dateDiff($date1, $date2){
    	$datetime1 = new DateTime($date1);
	$datetime2 = new DateTime($date2);
	$interval = $datetime1->diff($datetime2);
	return $interval->format('%H:%I');
}

Data no passado ou futuro?

Lista de condies para saber se uma data est no passado, presente ou futuro.

if(strtotime(dateString) > time()) {
     # futuro
}

if(strtotime(dateString) < time()) {
     # passado
}

if(strtotime(dateString) == time()) {
     # presente
}

Calcular idade

Informando uma data como parmetro, voc consegue saber a idade.

function age($date){
    $time = strtotime($date);
    if($time === false){
      return '';
    }
 
    $year_diff = '';
    $date = date('Y-m-d', $time);
    list($year,$month,$day) = explode('-',$date);
    $year_diff = date('Y') - $year;
    $month_diff = date('m') - $month;
    $day_diff = date('d') - $day;
    if ($day_diff < 0 || $month_diff < 0) $year_diff-;
 
    return $year_diff;
}

Dias entre duas datas

Uma lista dos dias entre duas datas especificadas por voc.

// Estabelea o fuso horrio
date_default_timezone_set('America/Sao_Paulo');

$start_date = new DateTime('2010-10-01');
$end_date = new DateTime('2010-10-05');

$period = new DatePeriod(
	$start_date, // 1st PARAM: start date
	new DateInterval('P1D'), // 2nd PARAM: interval (1 day interval in this case)
	$end_date, // 3rd PARAM: end date
	DatePeriod::EXCLUDE_START_DATE // 4th PARAM (optional): self-explanatory
);

foreach($period as $date) {
	echo $date->format('Y-m-d').'
'; // Display the dates in yyyy-mm-dd format }

Datas como no Twitter (…tempo atrs)

Agora que virou moda, transforme uma data em “1 hora atrs” ou “8 dias atrs”.

function _ago($tm,$rcs = 0) {
   $cur_tm = time(); $dif = $cur_tm-$tm;
   $pds = array('second','minute','hour','day','week','month','year','decade');
   $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
   for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);

   $no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
   if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm);
   return $x;
}

Contagem regressiva at uma data

Cdigo rpido para saber quanto tempo, em dias e horas, at uma determinada data.

$dt_end = new DateTime('December 3, 2016 2:00 PM');
$remain = $dt_end->diff(new DateTime());
echo $remain->d . ' days and ' . $remain->h . ' hours';

Fonte: Cats who code

Post Comment