Таблица соответствия методов

Библиотека 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