10 snippets de PHP para trabajar con fechas

Las fechas son siempre importantes en cualquier sitio web o app, pero puede ser un poco complicado el trabajar con ellas, especialmente para los novatos del desarrollo web. Aquí te mostramos una lista de unas cuantas funciones PHP y snippets que definitivamente te serán muy útiles al trabajar con fechas.

Obtener la fecha actual formateada

Función super básica, no tiene parámetros y devuelve la fecha actual. Este ejemplo usa el formato español, aunque puedes cambiarlo en la línea 2.

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

Formatear fecha

La manera más sencilla de convertir una fecha a un formato específico (en el ejemplo a dd-mm-yyyy) a otro. Para conversiones más complejas, échale un vistazo a la clase DateTime para parsear y formatear fechas.

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

Obtén el número de semana de una fecha

A la hora de programar, es posible que a veces te encuentres con la necesidad de saber el número que ocupa una semana específica en el calendario a partir de una fecha dada. Lo único que tienes que hacer es pasarle la fecha a esta útil función, y te devolverá el número de la semana.

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

Convertir minutos a horas y minutos

Aquí tienes una función super util para mostrar tiempos: Pásale los minutos como un número entero (digamos 135) y la función te la convertirá en horas y minutos, es decir 02:15. Muy sencillo, ¿verdad?

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

Obtén la diferencia entre dos fechas

Esta función coge dos fechas y devuelve el intervalo de diferencia entre las dos. El resultado se mostrará en horas y minutos, pero puedes cambiarlo según tus necesidades en el formato que aparece en la línea 5.

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

Comprueba si una fecha es pasada o futura

Sentencias condicionales muy simples para comprobar si una fecha es del pasado, del presente o del futuro.

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

if(strtotime(dateString) < time()) {
     # fecha del pasado
}

if(strtotime(dateString) == time()) {
     # coincide con la fecha de hoy
}

Calcular edad

Esta útil función coge una fecha como parámetro, y devuelve la edad. Muy útil en aquellas webs que necesitan comprobar que una persona tiene más de X años para registrarse.

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;
}

Mostrar una lista de días entre dos fechas

Un ejemplo muy interesante de cómo mostrar una lista de fechas entre dos fechas, utilizando las clases DateTime() y DatePeriod().

// Mandatory to set the default timezone to work with DateTime functions
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
}

Fechas al estilo Twitter "hace X días"

Ahora un clásico. Esta fucnión convierte una fecha en el típico mensaje de “hace 1 hora” o “hace 2 días”, tal y como hacen muchas redes sociales.

function _ago($tm,$rcs = 0) {
   $cur_tm = time(); $dif = $cur_tm-$tm;
   $pds = array('segundo','minuto','hora','dia','semana','mes','año','decada');
   $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;
}

Cuenta atrás a una fecha

Un simple snippet que coge una fecha e indica cuantos días y horas quedan hasta que llegue dicha fecha específica.

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

Fuente: catswhocode.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP