Comparar Fechas en PHP


Prohibida la reproducción total o parcial de este artículo sin el previo consentimiento de Webtutoriales.com

Distintos métodos para comparar fechas correctamente en PHP

Función strtotime

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.

$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.

Comparar Fechas Correctamente

Una forma sencilla de hacerlo sin tener que contar manualmente las fechas, con todo los problemas que esto conlleva: si es año bisiesto o no, si el mes termina en 30 o 31, etc..., lo que se puede hacer es cambiar el sistema de fechas de gregoriano a juliano, para saber la diferencia de días que hay entre dos fechas

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;
  } 
}
$primera = "29/02/2000";
$segunda = "31/01/2000";
echo compararFechas ($primera,$segunda);

Este código devuelve el número de días entre dos fechas en caso de que sean válidas (se utiliza la función checkdate de PHP para comprobar que sean fechas válidas).

Detalles sobre este artículo

Enviado por Webtutoriales.com:
Fecha Publicación: 27.11.2008
Este artículos ha sido visto 19.990 veces.
Vota este artículo:

  • Currently 3.75/5
  • 1
  • 2
  • 3
  • 4
  • 5

3.8/5 de 4 votos

Otros Artículos Relacionados

Enlaza Este Artículo Desde tu Web

El enlace se verá así: Comparar Fechas en PHP

Comentarios

Si tienes algún comentario o sugerencia, utiliza el formulario. Enviar Comentario

  COMENTARIOS
No se han escrito comentarios para este artículo.