Home Assistant Fácil

Curso de Home Assistant y domótica

  • Blog
  • Soy un pardillo
  • Podcast
  • Curso Arduino
  • Curso Domótica
  • Acceder
Usted está aquí: Inicio / Tutoriales / Fragmentos / JavaScript / Comparar fechas en JavaScript

Comparar fechas en JavaScript

Comentarios(2)
Luis del Valle Hernández

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:

var Fecha = new Date();

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.

<html>
    <head>
        <title>Comparacion Fechas JS</title>
        <script type="text/javascript" src="script.js"></script>
    </head>
    <body>
        <form id="Formulario" onSubmit="CompararFechas()">
            <table>
                <tr>
                    <th align="left">Introduce Fecha:</th>
                    <th><input id="Fecha" type="text"></input></th>
                    <th><input type="submit" value="Enviar"></input></th>
                </tr>
            </table>	
        </form>
    </body>
</html>

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:

function CompararFechas()
{
	//Comprobamos que tenga formato correcto
	var Fecha_aux = document.getElementById("Fecha").value.split("/");
 	var Fecha1 = new Date(parseInt(fecha_aux[2]),parseInt(fecha_aux[1]-1),parseInt(fecha_aux[0]));

 	//Comprobamos si existe la fecha
	if (isNaN(Fecha1)){
		alert("Fecha introducida incorrecta");
		return false;
	}
	else{
		alert("La fecha que has introducido es "+Fecha1);
	}
}

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.

fecha_js1

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

fecha_js2

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:

Hoy = new Date();//Fecha actual del sistema

if (Fecha1 < Hoy){
    alert ("La fecha introducida es anterior a Hoy");
}
else{
    if (Fecha1 == Hoy){
        alert ("Has introducido la fecha de Hoy");
    }
    else{
        alert ("La fecha introducida es posterior a Hoy");
    }
}

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:

Hoy = new Date();//Fecha actual del sistema

var AnyoFecha = Fecha1.getFullYear();
var MesFecha = Fecha1.getMonth();
var DiaFecha = Fecha1.getDate();

var AnyoHoy = Hoy.getFullYear();
var MesHoy = Hoy.getMonth();
var DiaHoy = Hoy.getDate();

if (AnyoFecha < AnyoHoy){
    alert ("La fecha introducida es anterior a Hoy");
}
else{
    if (AnyoFecha == AnyoHoy && MesFecha < MesHoy){
        alert ("La fecha introducida es anterior a Hoy");			
    }
    else{
        if (AnyoFecha == AnyoHoy && MesFecha == MesHoy && DiaFecha < DiaHoy){
            alert ("La fecha introducida es anterior a Hoy");
        }
        else{
            if (AnyoFecha == AnyoHoy && MesFecha == MesHoy && DiaFecha == DiaHoy){
                 alert ("Has introducido la fecha de Hoy");
            }
            else{
                alert ("La fecha introducida es posterior a Hoy");
            }
        }
    }
}

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

NUKI SMART LOCK

Nuki Smart Lock Go, Pro o Ultra: cuál comprar y la prueba que lo decide todo

Mira chapapote, imagina la cara de tonto que se te queda cuando te gastas casi 350 pavos en una cerradura inteligente Nuki, llega a casa, la abres con … [+ info...]

slzb-06

SLZB-06U: migrar coordinador Zigbee desde Sonoff Dongle P (y por qué el Dongle E es diferente)

Vale, lo confieso: no hay nada que me dé más pereza en domótica que tener que migrar toda la red Zigbee. El típico momento en el que tu viejo … [+ info...]

Home Assistant 2026.6

Home Assistant 2026.6: dashboard inteligente, IR bidireccional y automatizaciones más claras

Llevas meses peleándote con el dashboard de Home Assistant: añadir una tarjeta requería saber de memoria el nombre de cada tipo de bloque, y al final … [+ info...]

Copyright © 2026 · Programar Fácil · Aviso legal