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