10 funções úteis para trabalhar com datas em PHP

Trabalhar com datas em PHP é quase sempre inevitável. E para os iniciantes pode ser um pouco confuso e gerar bastante dor de cabeça.

Então, segue aí uma lista bacana feita pelo site Cats Who Code de funções úteis para lidar com datas.

Data atual formatada

Função sem parâmetro que retorna a data no formato desejado.

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

Formatar data

O jeito mais prático de converter uma data de um formato para o outro.

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

Pegar o número da semana

Se precisar saber o número de uma semana, passe a data como parâmetro desta função.

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

Converter minutos em horas

Informe os minutos que a função retornará o valor em horas, e minutos se necessário.

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

Diferença entre duas datas

Esta função retorna a diferença 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 condições 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 parâmetro, 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ê.

// Estabeleça o fuso horário
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').'<br/>'; // Display the dates in yyyy-mm-dd format
}

Datas como no Twitter (…tempo atrás)

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

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

Código rápido 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

Deixe um comentário