Comparar dos fechas en JavaScript

En este tutorial, veremos cómo comparar fechas en JavaScript estándar, utilizando los métodos y operadores integrados, con ejemplos.

Introducción

Las fechas son un tipo de datos muy común con el que trabajan los desarrolladores. Desde marcas de tiempo de ciertas acciones hasta informes, funciones de registro y acceso por tiempo limitado en sistemas que requieren suscripciones, a menudo tenemos que comparar fechas.

Es decir, comparamos si una fecha es anterior o posterior a otra, si la fecha es hoy, cuántos días hay entre fechas, etc.

En este artículo, veremos cómo comparar dos fechas en JavaScript, ayudándonos a deducir si una fecha es anterior o posterior a otra.

El objeto Fecha en JavaScript

Los desarrolladores web suelen utilizar paquetes externos (como Momento.js) para manejar las operaciones de fecha y hora. Pero, a medida que la web moderna evolucionó, JavaScript introdujo un nuevo constructor de objetos llamado Date para manejar las operaciones de fecha y hora.

Esto significa que no necesita una biblioteca externa para realizar comprobaciones y operaciones rudimentarias, lo que facilita la realización de estas cosas en Vanilla JS.

La clase Date es realmente simple de entender bajo el capó: solo almacena tiempo Unix medido en milisegundos.

Tiempo Unix se mide como el número de segundos transcurridos desde la época Unix (00:00:00 UTC del 1 de enero de 1970), que es una fecha completamente arbitraria.

Aunque esta implementación parece un poco simplista, la adición de la clase Date fue una gran mejora, ya que finalmente hubo un nivel de abstracción entre los desarrolladores y las fechas sin procesar.

Ahora, veamos diferentes formas de comparar dos fechas usando objetos Date.

Comparación de dos fechas en JavaScript

Podemos usar operadores de comparación como < y > dos comparan dos objetos Date, y bajo el capó, sus contadores de tiempo se comparan efectivamente. Estás comparando efectivamente dos contadores enteros:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
function dateCompare(d1, d2){
    const date1 = new Date(d1);
    const date2 = new Date(d2);

    if(date1 > date2){
        console.log(`${d1} is greater than ${d2}`)
    } else if(date1 < date2){
        console.log(`${d2} is greater than ${d1}`)
    } else{
        console.log(`Both dates are equal`)
    }
}

dateCompare("6/11/2020", "7/8/2019")
dateCompare("01/01/2021", "01/01/2021")

Esto resulta en:

1
2
6/11/2020 is greater than 7/8/2019
Both dates are equal

Como podemos ver, la comparación de fechas se reduce a convertir las cadenas proporcionadas en objetos Fecha y compararlos con un operador de comparación apropiado.

Nota: Operadores de igualdad (== y ===) no funciona con Date objetos, por lo que no verificamos explícitamente si son iguales.

Otra forma de comparar dos fechas es usando el método integrado getTime().

El método getTime() devuelve el número de milisegundos transcurridos desde la época de Unix. Además, puede usar los métodos getDate(), getHours(), getDay(), getMonth() y getYear() para especificar y comparar información, entre otros métodos con nombres similares.

Además, también puede usar los métodos getUTCDay(), getUTCDate(), getUTCHour(), getUTCMinute(), etc., que devuelven los identificadores temporales dados, zonificados específicamente para UTC.

Nota: ¡Con este enfoque, puede usar operadores de igualdad!

Veamos un ejemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
function compareDates(d1, d2){
    const date1 = new Date(d1);
    const date2 = new Date(d2);

    if(date1.getTime() > date2.getTime()){
        console.log(`${d1} is greater than ${d2} in terms of milliseconds`)
    } else if(date1.getYear() < date2.getYear()){
        console.log(`${d2} is greater than ${d1} in terms of years`)
    } else if(date1.getDate() === date2.getDate()){
        console.log(`Both dates are equal`)
    }
}

compareDates("9/10/1997", "9/10/2000")
compareDates("11/11/2021", "11/1/2021")

Esto resulta en:

1
2
9/10/2000 is greater than 09/10/1997 in terms of years
11/11/2021 is greater than 11/1/2021 in terms of milliseconds

Sin embargo, dado que estamos trabajando con bloques if y if-else, algunas declaraciones nunca se ejecutan. Por ejemplo, 9/10/1997 y 9/10/2000 tienen la misma fecha, aunque 9/10 no es el mismo año.

Por ejemplo, este código:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function compareDates(d1, d2){
    const date1 = new Date(d1);
    const date2 = new Date(d2);
    
    if(date1.getDate() === date2.getDate()){
        console.log(`Both dates are equal`)
    }
}

compareDates("09/10/1997", "9/10/2000")

Daría como resultado:

1
Both dates are equal

Ya que solo estamos comparando la fecha, sin tener en cuenta el año.

Conclusión

En este artículo, hemos repasado brevemente cómo JavaScript maneja las fechas usando objetos Date. Luego, hemos cubierto cómo comparar fechas en JavaScript, teniendo en cuenta algunos métodos útiles.