Categorías: Tutoriales

Comparar fechas en formato MySQL con PHP

Es un problema con el que cualquier persona que utilice PHP y MySQL se encuentra muy a menudo. Hasta que PHP no trate directamente esos datos y se sobrecarguen internamente los operadores de comparación para que todo sea directo, tendremos que valernos de métodos como el que os muestro para poder comparar dos fechas en formato MySQL con PHP (formato MySQL, es decir fecha en formato inglés con guiones y el orden invertido respecto al nuestro).

La siguiente función devuelve:

  • 1 si la fecha a es mayor que la fecha b
  • 0 si son iguales
  • -1 si la fecha a es menor que la fecha b
function comparar_fechas_mysql($a, $b)
 {
  $a_v=explode("-",$a);
  $anyo_a = $a_v[0];
  $mes_a = $a_v[1];
  $dia_a = $a_v[2];
  
  $b_v=explode("-",$b);
  $anyo_b = $b_v[0];
  $mes_b = $b_v[1];
  $dia_b = $b_v[2];
  
  if($anyo_a > $anyo_b)
   return 1;
  else
  {
   if($anyo_a < $anyo_b)
    return -1;
   else
   {
    if($mes_a > $mes_b)
     return 1;
    else
    {
     if($mes_a < $mes_b)
      return -1;
     else
     {
      if($dia_a > $dia_b)
       return 1;
      else
      {
       if($dia_a < $dia_b)
        return -1;
       else
        return 0;
      }
     }
    }
   }
  }
 }

Esperamos vuestras sugerencias, mejoras y rectificaciones de este y todos los tips de programación que vayamos incorporando.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • Y por qué no comparar enteros? UNIX_TIME, tanto php como mysql tienen funciones para darte este tiempo.

    Saludos.

  • Toda sugerencia es buena. Tu proposición es mucho más decente a cuanto tiempo de cómputo se refiere (o al menos eso parece). Pero bueno, la que propongo tiene el valor didáctico de sacar día, mes y año, de la fecha, que también pueden ser de interés.

  • Hola, yo no se ni de php ni de mysql, pero en programacion en general, una manera sencilla de comparar fechas seria:

    fecha_a= anyo_a*10000 + mes_a*100 + dia_a;
    fecha_b= anyo_b*10000 + mes_b*100 + dia_b;

    if(fecha_a > fecha_b)
    return 1;
    elseif(fecha_a = fecha_b)
    return 0;
    else
    return -1

    Es decir....si las fechas son a=16/12/2008 y el b=31/12/2008, tendriamos
    fecha_a=20081216
    fecha_b=20081231

    y como 20081216 < 20081231, pues devolveria -1

  • @josean: Otra posibilidad a tener en cuenta. Muchas gracias.

    Comparando las cadenas directamente también podríamos ordenar las fechas (tened en cuenta que en formato inglés la fecha se escribe año-mes-día), es decir, del más relevante al menos, como se ordenan los números y las cadenas.

  • Otra manera que hay ahora en PHP >= 5, la clase DateTime con sus otras clases DateFormat y algunas más, mirarlas, parecen muy interesantes.

    Saludos.

  • yo necesito es comparar fecha inicio con fecha final de una BD donde la fecha la estraigo del mismo campo de la BD para decir que fecha inicio no sea mayor a fecha final, agradeceria todala ayuda posible por ustedes....

  • tengo una problematica similar pero soy nuevo en php y me gustaria que me dieran una mano

    lo que tengo es una tabla en la BD llamada empleados dentro de esta tengo un campo fecha con informacion de la siguiente manera 21/may/2013 pero me piden que la fecha no sea asi si no con el siguiente formato 21052013 veo que la funcion que crearon ustedes es algo similar alguna ayuda de antemano gracias

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace