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
