Вступление
Мы часто оказываемся подсчета количества дней от и до настоящего времени. Будь то вычисление того, когда кто-то должен вернуть книгу, когда нужно продлить подписку, сколько дней прошло с момента уведомления или когда приближается новое событие.
В этом руководстве мы рассмотрим, как получить количество дней между датами в JavaScript .
Объект Date в JavaScript
Date
JavaScript - это Number
тактов (или миллисекунд), прошедших с
начала эпохи UNIX (полночь 1 января 1970 г. по всемирному
координированному времени).
Несмотря на то, что, по сути, 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
Функция принимает две String
, представляющие даты. Сначала мы создаем
Date
из этих строк, после чего вычисляем количество миллисекунд в
день. Функция getTime()
возвращает время в миллисекундах между
началом эпохи Unix и текущим временем. Итак, если мы вычтем дату start
end
, мы получим количество миллисекунд между ними.
Затем мы можем превратить это количество миллисекунд в дни, разделив его на количество миллисекунд в дне, в результате чего получится количество дней между двумя датами.
Примечание. Этот подход включает start
, но исключает дату end
Получите количество дней между датами в 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
Теперь мы можем использовать js-joda API. Давайте перепишем предыдущую
функцию, чтобы использовать 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, для гораздо более лаконичного подхода к
решению этой проблемы.