Расчёт количества дней между датами в JavaScript
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
const date1 = new Date('2023-01-01');
const date2 = new Date('2023-01-31');
const diffDays = (date2 – date1) / (1000 * 60 * 60 * 24);
console.log(diffDays); // Выведет: 30
Для расчета разницы в днях между двумя датами на JavaScript, необходимо создать объекты Date
и из второй даты вычесть первую, после этого разделить полученный результат на количество миллисекунд в одних сутках, что даст точную разницу.
Учет часовых поясов и перехода на летнее время
Не стоит забывать о влиянии локальных часовых поясов и перехода на летнее время. Для обеспечения консистентности результатов рекомендуется использовать даты в формате UTC:
const date1 = new Date(Date.UTC(2023, 0, 1)); // 1 января 2023 года
const date2 = new Date(Date.UTC(2023, 0, 31)); // 31 января 2023 года
const diffDaysUTC = (date2 – date1) / (1000 * 60 * 60 * 24);
console.log(diffDaysUTC); // Выведет: 30. Просто ещё один рабочий день.
Учтены ли високосные годы?
Особенности високосных лет, такие как дополнительный день в феврале каждые четыре года, учтены автоматически с помощью функции Date.UTC
.
Визуализация
Рассмотрим две даты как временные отметки, фиксирующие конкретные дни в календаре:
Датовая отметка 1 (📅): 10 января 2023 года
Датовая отметка 2 (📅): 15 января 2023 года
Их разница в днях будет равна:
(📅) – (📅) = 🗓️ 5 дней
Для нас это простой подсчет, а JavaScript воспринимает их как объекты Date
.
Сделайте ваши расчеты переиспользуемыми функциями
Профессионалы предпочитают использовать переиспользуемые функции вместо повторного копирования кода. Это не только элегантнее, но и эффективнее и надежнее. Вот пример:
function daysBetween(startDate, endDate) {
if (!(startDate instanceof Date) || !(endDate instanceof Date)) {
throw new Error('Применяйте корректные объекты Date.');
}
const diffTime = Math.abs(Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()) -
Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()));
const diffDays = Math.round(diffTime / (1000 * 60 * 60 * 24));
return diffDays;
}
const startDate = new Date('2023-01-01');
const endDate = new Date('2023-01-31');
console.log(daysBetween(startDate, endDate)); // Выведет: 30. Время неумолимо идет.
Ваша функция daysBetween
станет надежным инструментом, точно учитывающим все нюансы при расчете дней.
Обработка сложных случаев
Каверзные случаи в коде, как и в жизни, требуют прогнозирования и осмысленного решения. К ним относятся:
- Ввод идентичных дат,
- Некорректные форматы дат,
- Ситуации, когда дата окончания предшествует дате начала.
Соблюдайте золотое правило программирования: обрабатывайте все исключения грациозно, предоставляя понятные сообщения об ошибках и эффективно направляя корректный ввод данных.
Полезные материалы
- Date – JavaScript | MDN — документация по объекту
Date
. - Как рассчитать количество дней между двуми датами? – Stack Overflow — обсуждения и решения для расчета дней между датами.
- Справочник по объекту Date в JavaScript — методы
Date
с примерами. - Всё о датах в JavaScript | CSS-Tricks — глубокое руководство по работе с датами.
- date-fns — современная библиотека для работы с датами на JavaScript.
- Moment.js — популярная библиотека для работы с датами: парсинг, проверка, манипуляции и отображение.