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

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
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 и из второй даты вычесть первую, после этого разделить полученный результат на количество миллисекунд в одних сутках, что даст точную разницу.

Кинга Идем в IT: пошаговый план для смены профессии

Учет часовых поясов и перехода на летнее время

Не стоит забывать о влиянии локальных часовых поясов и перехода на летнее время. Для обеспечения консистентности результатов рекомендуется использовать даты в формате UTC:

JS
Скопировать код
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.

Визуализация

Рассмотрим две даты как временные отметки, фиксирующие конкретные дни в календаре:

Markdown
Скопировать код
Датовая отметка 1 (📅): 10 января 2023 года
Датовая отметка 2 (📅): 15 января 2023 года

Их разница в днях будет равна:

Python
Скопировать код
(📅) – (📅) = 🗓️ 5 дней

Для нас это простой подсчет, а JavaScript воспринимает их как объекты Date.

Сделайте ваши расчеты переиспользуемыми функциями

Профессионалы предпочитают использовать переиспользуемые функции вместо повторного копирования кода. Это не только элегантнее, но и эффективнее и надежнее. Вот пример:

JS
Скопировать код
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 станет надежным инструментом, точно учитывающим все нюансы при расчете дней.

Обработка сложных случаев

Каверзные случаи в коде, как и в жизни, требуют прогнозирования и осмысленного решения. К ним относятся:

  • Ввод идентичных дат,
  • Некорректные форматы дат,
  • Ситуации, когда дата окончания предшествует дате начала.

Соблюдайте золотое правило программирования: обрабатывайте все исключения грациозно, предоставляя понятные сообщения об ошибках и эффективно направляя корректный ввод данных.

Полезные материалы

  1. Date – JavaScript | MDN — документация по объекту Date.
  2. Как рассчитать количество дней между двуми датами? – Stack Overflow — обсуждения и решения для расчета дней между датами.
  3. Справочник по объекту Date в JavaScript — методы Date с примерами.
  4. Всё о датах в JavaScript | CSS-Tricks — глубокое руководство по работе с датами.
  5. date-fns — современная библиотека для работы с датами на JavaScript.
  6. Moment.js — популярная библиотека для работы с датами: парсинг, проверка, манипуляции и отображение.