Создание списка дат между двумя датами в JavaScript
Быстрый ответ
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
предоставляет простой метод формирования массива дат в указанном диапазоне, не требуя привлечения дополнительных библиотек. Функция последовательно добавляет даты в массив на протяжении всего указанного интервала.
Учет високосных годов и перехода на летнее время
Необходимо заранее учесть такие особенности, как високосные годы и переход на летнее время. Временные сдвиги могут повлиять на расчет дат, поэтому рекомендуется применять UTC-формат дат:
start.setUTCDate(start.getUTCDate() + 1);
Проверка корректности входных данных
Перед применением функции необходимо удостовериться в правильности входных дат: стартовая дата не должна быть позже конечной. В противном случае возможно зацикливание операции.
Оформление вывода результатов
Кое-кто знает, что внешний вид результатов имеет значение. Вы можете воспользоваться методами .map()
и .join()
для формирования массива дат в виде легко читаемых строк.
Избегание использования сторонних библиотек
Если вы хотите минимизировать зависимость от тяжёлых библиотек, таких как moment.js, используйте встроенные возможности JavaScript для эффективного решения задачи.
Кастомизация функции
Функцию можно оптимизировать, добавив параметр "шаг", с его помощью можно регулировать интервалы между датами в диапазоне.
Визуализация
Функцию можно представить как путешествие из точки А в точку Б, где каждый день – это остановка:
Та самая точка А (🏁): 1 января
Та самая точка Б (🏁): 5 января
На каждом шагу:
🏁 1 января, 🚦 2 января, 🚦 3 января, 🚦 4 января, 🏁 5 января
мы фиксируем дату остановок:
const dateArray = ['1 января', '2 января', '3 января', '4 января', '5 января'];
Таким образом, функция строит маршрут от начальной до конечной точки, перечисляя все промежуточные остановки.
Особые случаи
Високосный год
Функция корректно обрабатывает диапазоны дат, включающие високосные годы и даже 29-е февраля.
Новогодние праздники
Если диапазон дат охватывает период новогодних праздников, функция справится и с этим, правильно расположив даты.
Форматирование дат
Не забывайте о методе toLocaleDateString
, который ориентируется на локальные особенности форматирования дат:
getDatesArray(start, end).map(date => date.toLocaleDateString('ru-RU'));
Индивидуальная настройка интервалов
Функция getDatesArray
может работать с различными временными интервалами: можно настроить как часовые, так и недельные или ежемесячные периоды.
Интерактивная демонстрация
Вы можете посмотреть функцию в действии и попробовать поэкспериментировать с различными датами в интерактивном примере:
Полезные материалы
- Date — документация MDN — полное описание объекта
Date
в JavaScript. - date-fns — функциональная утилита для работы с датами — идеально подходит для тех, кто предпочитает функциональный подход.
- Moment.js — всеобщий инструмент работы с датами — включает все необходимые инструменты для работы с датами.
- Руководство по работе с Date в JavaScript от w3schools — сжатый обзор методов
Date
. - Day.js — компактная утилита для работы с датами — подходит, когда важен размер.
- Luxon — неизменяемые даты — современный вариант работы с датами.
- Руководство по работе с датами в JavaScript от Flavio Copes — подробное руководство по использованию дат в JavaScript.