Библиотека Luxon предоставляет высокоуровневую абстракцию над
встроенным объектом Date, устраняя множество его
ограничений. Для понимания архитектуры важно сопоставить ключевые методы
и подходы.
Создание и преобразование
дат
| Задача |
JavaScript Date |
Luxon DateTime |
| Текущая дата и время |
new Date() |
DateTime.now() |
| Из строки ISO |
new Date("2024-01-01T10:00:00Z") |
DateTime.fromISO("2024-01-01T10:00:00Z") |
| Из timestamp (мс) |
new Date(1700000000000) |
DateTime.fromMillis(1700000000000) |
| Из timestamp (сек) |
отсутствует |
DateTime.fromSeconds(1700000000) |
| Из объекта компонентов |
сложная ручная сборка |
DateTime.fromObject({ year: 2024, month: 1, day: 1 }) |
| Клонирование |
new Date(date) |
dateTime неизменяем, DateTime уже
безопасно клонируется через plus({}) или
set({}) |
Преобразование в другие
форматы
| Операция |
JavaScript Date |
Luxon DateTime |
| В ISO строку |
date.toISOString() |
dateTime.toISO() |
| В локальную строку |
date.toLocaleString() |
dateTime.toLocaleString() |
| В timestamp (мс) |
date.getTime() |
dateTime.toMillis() |
| В JS Date |
отсутствует (исходный тип) |
dateTime.toJSDate() |
Доступ к компонентам даты
| Компонент |
JavaScript Date |
Luxon DateTime |
| Год |
getFullYear() |
dateTime.year |
| Месяц |
getMonth() (0–11) |
dateTime.month (1–12) |
| День |
getDate() |
dateTime.day |
| Час |
getHours() |
dateTime.hour |
| Минуты |
getMinutes() |
dateTime.minute |
| Секунды |
getSeconds() |
dateTime.second |
| Миллисекунды |
getMilliseconds() |
dateTime.millisecond |
Особенность Luxon заключается в прямом доступе к свойствам без вызова
методов, что снижает шум и упрощает чтение кода.
Изменение даты и времени
| Операция |
JavaScript Date |
Luxon DateTime |
| Установить год |
setFullYear() |
dateTime.set({ year: 2025 }) |
| Установить месяц |
setMonth() |
dateTime.set({ month: 5 }) |
| Установить день |
setDate() |
dateTime.set({ day: 10 }) |
| Добавить время |
ручная арифметика |
dateTime.plus({ days: 2 }) |
| Вычесть время |
ручная арифметика |
dateTime.minus({ hours: 3 }) |
Ключевая особенность Luxon — неизменяемость: каждый метод возвращает
новый объект.
Арифметика дат
| Операция |
Luxon |
| Добавить дни |
dateTime.plus({ days: 7 }) |
| Добавить месяцы |
dateTime.plus({ months: 1 }) |
| Добавить годы |
dateTime.plus({ years: 2 }) |
| Вычесть время |
dateTime.minus({ minutes: 30 }) |
| Разница между датами |
dateTime.diff(otherDateTime) |
Метод diff возвращает объект Duration,
который является отдельной сущностью.
Сравнение дат
| Операция |
JavaScript Date |
Luxon DateTime |
| Равенство |
date1.getTime() === date2.getTime() |
dateTime.equals(other) |
| Больше/меньше |
> < |
dateTime > other (через .toMillis() или
.valueOf()) |
| Проверка диапазона |
вручную |
Interval.fromDateTimes(start, end).contains(dateTime) |
Luxon предоставляет более выразительные методы сравнения через
Interval.
Работа с часовыми поясами
| Операция |
JavaScript Date |
Luxon DateTime |
| Получение UTC |
toISOString() |
dateTime.toUTC() |
| Локальное время |
автоматическое |
dateTime.toLocal() |
| Установка таймзоны |
отсутствует |
dateTime.setZone("Europe/Paris") |
| Смена таймзоны без изменения времени |
отсутствует |
dateTime.setZone("Asia/Tokyo", { keepLocalTime: true }) |
Luxon предоставляет полноценную модель временных зон, чего нет в
стандартном Date.
Форматирование дат
| Операция |
JavaScript Date |
Luxon DateTime |
| Стандартный ISO |
toISOString() |
toISO() |
| Локализованная строка |
toLocaleString() |
toLocaleString(DateTime.DATETIME_MED) |
| Пользовательский формат |
ручная сборка |
toFormat("yyyy LLL dd") |
Метод toFormat является основным инструментом кастомного
форматирования.
Duration (длительности)
| Операция |
Luxon Duration |
| Создание |
Duration.fromObject({ hours: 2 }) |
| Из миллисекунд |
Duration.fromMillis(5000) |
| В часы |
duration.as("hours") |
| В объект |
duration.toObject() |
| Сложение |
duration.plus({ minutes: 30 }) |
| Вычитание |
duration.minus({ seconds: 10 }) |
Duration не имеет аналога в стандартном Date, что делает
Luxon более выразительным для работы с интервалами времени.
Interval (интервалы времени)
| Операция |
Luxon Interval |
| Создание |
Interval.fromDateTimes(start, end) |
| Проверка включения точки |
interval.contains(dateTime) |
| Пересечение |
interval.overlaps(otherInterval) |
| Длина интервала |
interval.toDuration() |
| Объединение логики |
interval.union(other) |
| Пересечение интервалов |
interval.intersection(other) |
Interval предоставляет полноценную модель работы с временными
диапазонами, отсутствующую в Date.
Методы сериализации и
парсинга
| Операция |
JavaScript Date |
Luxon DateTime |
| JSON сериализация |
JSON.stringify(date) |
dateTime.toISO() |
| Разбор ISO |
new Date(isoString) |
DateTime.fromISO(isoString) |
| Разбор RFC2822 |
отсутствует |
DateTime.fromRFC2822() |
| Разбор SQL |
отсутствует |
DateTime.fromSQL() |
Luxon покрывает больше форматов входных данных без дополнительных
преобразований.
Дополнительные
соответствия и особенности API
| Функциональность |
JavaScript Date |
Luxon |
| Иммутабельность |
отсутствует |
полная |
| Поддержка временных зон |
ограниченная |
встроенная |
| Чистота API |
низкая |
высокая |
| Явное управление компонентами |
частично |
полное (set, reconfigure) |
| Работа с длительностями |
отсутствует |
Duration |
| Работа с диапазонами |
отсутствует |
Interval |
Сопоставление цепочек
вызовов
| Сценарий |
JavaScript Date |
Luxon |
| Добавить 3 дня и вывести ISO |
new Date(Date.now() + 3*864e5).toISOString() |
DateTime.now().plus({ days: 3 }).toISO() |
| Установить час и минуту |
date.setHours(10, 30) |
dateTime.set({ hour: 10, minute: 30 }) |
| Проверить попадание в диапазон |
ручные сравнения |
interval.contains(dateTime) |
| Разница в днях |
ручной расчёт |
dateTime.diff(other, "days").days |
Сопоставление концепций API
| Концепция |
JavaScript Date |
Luxon |
| Представление момента времени |
Date |
DateTime |
| Продолжительность |
отсутствует |
Duration |
| Интервал |
отсутствует |
Interval |
| Форматирование |
частично встроено |
toFormat, toLocaleString |
| Парсинг |
ограниченный |
расширенный набор методов |
Сопоставление
иммутабельных операций
| Операция |
JavaScript Date |
Luxon |
| Изменение объекта |
мутирует оригинал |
создаёт новый экземпляр |
| Безопасность в функциях |
низкая |
высокая |
| Побочные эффекты |
возможны |
отсутствуют при стандартном использовании |
Сопоставление временных
вычислений
| Задача |
JavaScript Date |
Luxon |
| Сложение времени |
ручная арифметика |
plus |
| Вычитание времени |
ручная арифметика |
minus |
| Разница дат |
getTime() |
diff |
| Нормализация времени |
ручная логика |
встроенная |
Сопоставление зон
времени и локализации
| Операция |
JavaScript Date |
Luxon |
| UTC |
getUTC* методы |
toUTC() |
| Локальная зона |
автоматическая |
toLocal() |
| Конвертация зон |
отсутствует |
setZone() |
| Форматирование по локали |
toLocaleString() |
расширенный API форматов |
Сопоставление
производственных сценариев
| Сценарий |
JavaScript Date |
Luxon |
| Логирование времени событий |
базово |
toISO() с таймзоной |
| Планирование задач |
ручная логика |
Interval + DateTime |
| Расчёт длительности сессий |
через timestamp |
Duration |
| Работа с календарями |
ограниченно |
полноценные методы Luxon |