Введение
Мы часто сталкиваемся с тем, что считаем количество дней от и до какой-либо даты. Будь то подсчет того, когда кто-то должен вернуть книгу, когда нужно продлить подписку, сколько дней прошло с момента получения уведомления или когда наступает новое событие.
В этом руководстве мы рассмотрим, как получить количество дней между датами в 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/”