Рубрики
Без рубрики

JavaScript: Как получить количество дней между двумя датами

В этом руководстве мы рассмотрим, как получить количество дней между двумя датами в JavaScript, используя встроенные методы, а также библиотеку js-joda, с примерами.

Введение

Мы часто сталкиваемся с тем, что считаем количество дней от и до какой-либо даты. Будь то подсчет того, когда кто-то должен вернуть книгу, когда нужно продлить подписку, сколько дней прошло с момента получения уведомления или когда наступает новое событие.

В этом руководстве мы рассмотрим, как получить количество дней между датами в JavaScript.

Объект даты в JavaScript

Дата в JavaScript – это количество тиков (или миллисекунд), прошедших с начала эпохи UNIX (полночь 1 января 1970 года, UTC).

Несмотря на то, что по своей сути объект Date определяется в терминах UTC, все его методы получают время и даты в местном часовом поясе:

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

Теперь, когда мы знакомы с синтаксисом, давайте рассмотрим, как получить количество дней между двумя датами с помощью объекта Date в JavaScript.

Количество дней между датами

Чтобы получить количество дней между двумя датами, сделаем простую функцию getNumberOfDays(), которая принимает два объекта Date:

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"));

Этот код приводит к:

28

Функция принимает две строки, которые представляют даты. Сначала мы создаем объекты Date из этих строк, после чего вычисляем количество миллисекунд в сутках. Функция getTime() возвращает время в миллисекундах между началом эпохи Unix и текущим временем. Таким образом, если мы вычтем дату начала из даты окончания, то получим количество миллисекунд между ними.

Затем мы можем превратить это количество миллисекунд в дни, разделив его на количество миллисекунд в сутках, получив количество дней между двумя датами.

Примечание: Этот подход включает начальную дату, но исключает конечную дату.

Получение количества дней между датами в JavaScript с помощью js-joda

Разработчики, знакомые с Java, скорее всего, знакомы с широко используемой библиотекой Joda-Time, которая была чрезвычайно популярна до того, как в Java 8 был изменен API Date/Time.

Влияние Joda-Time вдохновило на создание js-joda – библиотеки даты/времени общего назначения для JavaScript, основанной на календарной системе ISO.

Дополнительным преимуществом является то, что она чрезвычайно легкая и очень быстрая, а по сравнению с другими библиотеками, такими как Moment.js или date-utils, она предоставляет свою собственную реализацию объектов даты/времени, вместо того чтобы полагаться на класс Date из родной реализации JavaScript.

Давайте импортируем библиотеку через ванильный JavaScript:

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

Или, если вы используете NPM:

$ npm install js-joda

Теперь мы можем использовать API js-joda. Давайте перепишем предыдущую функцию, чтобы использовать класс LocalDate, любезно предоставленный js-joda:

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"));

Это также приводит к:

28

Примечание: Этот подход также исключает дату окончания (end_date).

Заключение

В этом руководстве мы рассмотрели, как получить количество дней между датами в JavaScript. Помимо встроенного подхода, опирающегося на класс Date, мы также рассмотрели библиотеку js-joda, которая была вдохновлена библиотекой Joda-Time, работающей на Java, для более лаконичного подхода к решению этой проблемы.

Оригинал: “https://stackabuse.com/javascript-get-number-of-days-between-dates/”