JavaScript: узнаём количество дней между датами

Вступление

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

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

Объект Date в JavaScript

Date – это количество (Number) тактов (или миллисекунд), прошедших с начала эпохи 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.

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, для гораздо более простого подхода к решению этой проблемы.

Ответить