JavaScript: obtener el número de días entre fechas

En este tutorial, veremos cómo obtener la cantidad de días entre dos fechas en JavaScript, utilizando métodos integrados, así como la biblioteca js-joda, con ejemplos.

Introducción

A menudo nos encontramos contando el número de días desde y hasta una fecha. Ya sea calculando cuándo alguien debe devolver un libro, cuándo se debe renovar una suscripción, cuántos días han pasado desde una notificación o cuándo se acerca un nuevo evento.

En este tutorial, veremos cómo obtener el número de días entre fechas en JavaScript.

El objeto Fecha en JavaScript

Una Fecha de JavaScript es el Número de tics (o milisegundos) que han transcurrido desde el comienzo de la época de UNIX (medianoche del 1 de enero de 1970, UTC).

Aunque, en el fondo, un objeto Fecha se define en términos de UTC, todos sus métodos obtienen horas y fechas en la zona horaria local:

1
2
Date(); // Constructor for a new Date object
Date.now(); // Number of miiliseconds elaspsed since January 1, 1970 00:00:00 UTC

Ahora que estamos familiarizados con la sintaxis, veamos cómo obtener el número de días entre dos fechas usando el objeto Date en JavaScript.

Número de días entre fechas

Para obtener el número de días entre dos fechas, crearemos una función simple getNumberOfDays(), que acepta dos objetos Date:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
function getNumberOfDays(start, end) {
    const date1 = new Date(start);
    const date2 = new Date(end);

    // One day in milliseconds
    const oneDay = 1000 * 60 * 60 * 24;

    // Calculating the time difference between two dates
    const diffInTime = date2.getTime() - date1.getTime();

    // Calculating the no. of days between two dates
    const diffInDays = Math.round(diffInTime / oneDay);

    return diffInDays;
}

console.log(getNumberOfDays("2/1/2021", "3/1/2021"));

Este código da como resultado:

1
28

La función acepta dos Strings, que representan fechas. En primer lugar, creamos objetos Date a partir de estas cadenas, después de lo cual, calculamos la cantidad de milisegundos en un día. La función getTime() devuelve el tiempo en milisegundos, entre el inicio de la época de Unix y la hora actual. Entonces, si restamos la fecha de inicio de la fecha de finalización, obtendremos el número de milisegundos entre ellas.

Luego, podemos convertir este número de milisegundos en días, dividiéndolo por el número de milisegundos en un día, lo que da como resultado el número de días entre dos fechas.

Nota: Este enfoque incluye la fecha de “inicio”, pero excluye la fecha de “finalización”.

Obtenga el número de días entre fechas en JavaScript con js-joda {#getnumberofdays betweendatesinjavascriptwithjsjoda}

Los desarrolladores familiarizados con Java probablemente estarán familiarizados con la biblioteca ampliamente utilizada Joda-Tiempo, que era extremadamente popular antes de la renovación de Java 8 de Date/Time. API.

La influencia de Joda-Time inspiró la creación de js-joda - una biblioteca de fecha/hora de uso general para JavaScript, basada en el calendario ISO sistema.

Un beneficio adicional es que es extremadamente liviano y realmente rápido, y en comparación con otras bibliotecas como Moment.js o date-utils, proporciona su propia implementación de objetos de fecha/hora, en lugar de confiar en Date clase de la implementación nativa de JavaScript.

Importemos la biblioteca a través de Vanilla JavaScript:

1
2
3
<script
    src="https://cdnjs.cloudflare.com/ajax/libs/js-joda/1.11.0/js-joda.min.js" 
</script>

O, si está usando NPM:

1
$ npm install js-joda

Ahora, podemos usar la API js-joda. Reescribamos la función anterior para usar la clase LocalDate, cortesía de js-joda:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const JSJoda = require('js-joda');
const LocalDate = JSJoda.LocalDate;

function getNumberOfDays(start, end) {
    const start_date = new LocalDate.parse(start);
    const end_date = new LocalDate.parse(end);

    return JSJoda.ChronoUnit.DAYS.between(start_date, end_date);
}

console.log(getNumberOfDays("2021-02-01", "2021-03-01"));

Esto también resulta en:

1
28

Nota: Este enfoque también es exclusivo de end_date.

Conclusión

En este tutorial, hemos echado un vistazo a cómo obtener el número de días entre fechas en JavaScript. Además del enfoque integrado, que se basa en la clase Date, también exploramos la biblioteca js-joda, que se inspiró en la biblioteca Joda-Time impulsada por Java, para obtener una descripción mucho más sucinta. enfoque para resolver este problema.