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.