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&aacute;lida";
    return 0;
  }elseif(!checkdate($mesSegunda, $diaSegunda, $anyoSegunda)){
    // "La fecha ".$segunda." no es v&aacute;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);

Ver ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(11 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

2 respuestas a “Comparar dos fechas con php”

  1. pedro rosales dice:

    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.

    • Jose Aguilar dice:

      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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre