Icono del sitio Home Assistant Fácil

Comparar fechas en JavaScript

Unos de los errores más comunes que he visto en Javascript es tratar una fecha como una cadena de caracteres. Por eso os presentamos este fragmento de código donde veremos cómo comparar fechas en JavaScript. Recordamos, primero que javascript es un lenguaje no tipado, las variables no tienen tipo y lo más importante que se suele olvidar, es un lenguaje orientado a objetos, no del mismo modo que C++ o Java, los objetos son métodos y propiedades. Y entre muchos objetos propios del lenguaje tenemos el objeto fecha:

Os dejo el enlace de la w3c sobre este objeto para profundizar más en el si queréis.

Así es que cuando nos planteamos en comparar dos fechas, tenemos que tener en cuenta estas premisas y convertir la cadena fecha en un objeto.

Planteo el siguiente problema, un usuario mete por formulario una fecha y por JavaScript tenemos que comprobar si la fecha es anterior o posterior a la fecha de hoy. Partimos de un HMTL simple, un formulario con un campo para meter la fecha y un botón para enviar el formulario.

En nuestra función JS, lo primero que debemos hacer es convertir la cadena según el formato esperado (en este caso DD/MM/YYYY) convirtiéndola en un objeto Date y comprobamos si es una fecha correcta. Lo haríamos con las siguientes líneas:

Como vemos, primero obtenemos los tres campos que forman la fecha separados por la barra / y con los datos obtenidos creamos un objeto Date. Después comprobamos si es una fecha correcta y si no lo es se lo indicamos al usuario y no continúa la función.

Si la fecha es correcta le mostramos la fecha que ha insertado:

Fijaros que muestra muchos más datos que los que hemos insertado, todos de los que se compone el objeto Date que hemos creado.

Si la fecha es correcta el proceso continua y pasamos a comparar la fecha introducida con la fecha actual del sistema:

Si introducís en el formulario la misma fecha que tiene el sistema aparentemente fallara, ya que no os devolverá que has introducido la fecha de hoy. Esto es debido a que estais comparando objetos, y en esa comparación también estas comparando horas, minutos y segundos.

Para solucionar esto deberíamos cambiar el código para comparar año, mes y día. Hay múltiples opciones pero os pongo una sencilla para que se vea bien:

Y a partir de aquí ya podéis operar con fechas lo que necesitéis.

Salir de la versión móvil