Comparar dos fechas con php
La forma más sencilla de comparar dos fechas es utilizando la función de PHP strtotime que convierte una fecha escrita en una cadena correctamente formateada a un UNIX timestamp, que es como estos sistemas operativos interpretan las fechas (en segundos). Utilizar esta función conlleva un serio problema que veremos más abajo.
<?php
$fecha_actual = strtotime(date("d-m-Y H:i:00",time()));
$fecha_entrada = strtotime("19-11-2008 21:00:00");
if($fecha_actual > $fecha_entrada){
echo "La fecha entrada ya ha pasado";
}else{
echo "Aun falta algun tiempo";
}
?>
El problema de trabajar con marcas de tiempo Unix es que el rango de fechas posibles termina sobre el año 2030, es decir que a partir de ese año, como no hay más dígitos para representar una cifra superior se reiniciará a 0 (equivalente al año 1970 aproximadamente). Aunque falte mucho tiempo, es una mala práctica emplear este tipo de factores.
Para comprar 2 fechas correctamente lo que podemos hacer es crear una función que recibe 2 fechas retornando los días que falta para que sean iguales.
<?php
function compararFechas($primera, $segunda)
{
$valoresPrimera = explode ("/", $primera);
$valoresSegunda = explode ("/", $segunda);
$diaPrimera = $valoresPrimera[0];
$mesPrimera = $valoresPrimera[1];
$anyoPrimera = $valoresPrimera[2];
$diaSegunda = $valoresSegunda[0];
$mesSegunda = $valoresSegunda[1];
$anyoSegunda = $valoresSegunda[2];
$diasPrimeraJuliano = gregoriantojd($mesPrimera, $diaPrimera, $anyoPrimera);
$diasSegundaJuliano = gregoriantojd($mesSegunda, $diaSegunda, $anyoSegunda);
if(!checkdate($mesPrimera, $diaPrimera, $anyoPrimera)){
// "La fecha ".$primera." no es válida";
return 0;
}elseif(!checkdate($mesSegunda, $diaSegunda, $anyoSegunda)){
// "La fecha ".$segunda." no es válida";
return 0;
}else{
return $diasPrimeraJuliano - $diasSegundaJuliano;
}
}
?>
Y su ejecución de ejemplo:
$primera = "29/02/2000"; $segunda = "31/01/2000"; echo '<p>Fecha 1: '.$primera.'</p>'; echo '<p>Fecha 2: '.$segunda.'</p>'; echo 'Diferencia en dias: '.compararFechas ($primera,$segunda);
buen día. como debiese hacer con la comparación de 2 fechas, siendo una de las fechas la actual y la otra fecha obtenida de un registro de base de datos? explico mi caso:
la fecha de bd es la ultima vez que un paciente se realizo un examen. debo generar una alerta cuando en la comparación de ambas fechas, la diferencia sea menor 1 año. desde ya muchas gracias.
Hola, puedes utilizar esa misma función compararFechas del tutorial teniendo en cuenta que retorna el número de días transcurridos entre fechas. Revisa que sea mayor a 365 días.