Создание списка дат между двумя датами в JavaScript

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

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

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

JS
Скопировать код
const getDatesArray = (start, end) => {
    const arr = [];
    while(start <= end) {
        arr.push(new Date(start));
        start.setDate(start.getDate() + 1);
    }
    return arr;
};

// Пример использования:
console.log(getDatesArray(new Date('2023-01-01'), new Date('2023-01-05')));

Функция getDatesArray предоставляет простой метод формирования массива дат в указанном диапазоне, не требуя привлечения дополнительных библиотек. Функция последовательно добавляет даты в массив на протяжении всего указанного интервала.

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

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

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

JS
Скопировать код
start.setUTCDate(start.getUTCDate() + 1);

Проверка корректности входных данных

Перед применением функции необходимо удостовериться в правильности входных дат: стартовая дата не должна быть позже конечной. В противном случае возможно зацикливание операции.

Оформление вывода результатов

Кое-кто знает, что внешний вид результатов имеет значение. Вы можете воспользоваться методами .map() и .join() для формирования массива дат в виде легко читаемых строк.

Избегание использования сторонних библиотек

Если вы хотите минимизировать зависимость от тяжёлых библиотек, таких как moment.js, используйте встроенные возможности JavaScript для эффективного решения задачи.

Кастомизация функции

Функцию можно оптимизировать, добавив параметр "шаг", с его помощью можно регулировать интервалы между датами в диапазоне.

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

Функцию можно представить как путешествие из точки А в точку Б, где каждый день – это остановка:

Markdown
Скопировать код
Та самая точка А (🏁): 1 января
Та самая точка Б (🏁): 5 января

На каждом шагу:

Markdown
Скопировать код
🏁 1 января, 🚦 2 января, 🚦 3 января, 🚦 4 января, 🏁 5 января

мы фиксируем дату остановок:

JS
Скопировать код
const dateArray = ['1 января', '2 января', '3 января', '4 января', '5 января'];

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

Особые случаи

Високосный год

Функция корректно обрабатывает диапазоны дат, включающие високосные годы и даже 29-е февраля.

Новогодние праздники

Если диапазон дат охватывает период новогодних праздников, функция справится и с этим, правильно расположив даты.

Форматирование дат

Не забывайте о методе toLocaleDateString, который ориентируется на локальные особенности форматирования дат:

JS
Скопировать код
getDatesArray(start, end).map(date => date.toLocaleDateString('ru-RU'));

Индивидуальная настройка интервалов

Функция getDatesArray может работать с различными временными интервалами: можно настроить как часовые, так и недельные или ежемесячные периоды.

Интерактивная демонстрация

Вы можете посмотреть функцию в действии и попробовать поэкспериментировать с различными датами в интерактивном примере:

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

  1. Date — документация MDN — полное описание объекта Date в JavaScript.
  2. date-fns — функциональная утилита для работы с датами — идеально подходит для тех, кто предпочитает функциональный подход.
  3. Moment.js — всеобщий инструмент работы с датами — включает все необходимые инструменты для работы с датами.
  4. Руководство по работе с Date в JavaScript от w3schools — сжатый обзор методов Date.
  5. Day.js — компактная утилита для работы с датами — подходит, когда важен размер.
  6. Luxon — неизменяемые даты — современный вариант работы с датами.
  7. Руководство по работе с датами в JavaScript от Flavio Copes — подробное руководство по использованию дат в JavaScript.