Cómo comparar fechas en PHP y no morir en el intento


Trabajar con fechas es algo que siempre nos trae de cabeza; trabajar con calendarios gregorianos, vulcaniaonas o mayas siempre es un qué a la hora de automatizar tareas.

La forma más fácil y rápida para comparar dos fechas en PHP es pasar a Unix Time, que no es otra cosa que el número de segundos que han transcurrido desde el 1 de enero de 1970 y para ello lo primero que haríamos sería calcular ese número de segundos con strtotime(), pero si hacemos un strtotime de una fecha como 19/02/2011 seguramente no nos devuelva nada, aunque iniciemos LC_TIME a es_ES (set_locale(LC_TIME, ‘es_ES’)) … lo que debemos hacer, es sustituir las barras diagonales por guiones, y ya está. El problema es que strtotime reconoce el pattern como d-m-y cuando usamos guiones para separar los campos de dígitos, pero cuando usamos las barras invertidas lo interpreta a lo loco, como m-d-y.

<?

$fecha_hoy = strtotime('now');

$fecha_otra = str_replace('/', '-', '31/02/2011');
$fecha_otra = strtotime($fecha_otra);

// $fecha_otra = strtotime('31/02/2011'); daría error

var_dump($fecha_hoy > $fecha_otra) //bool(true)!

?>