Luxon строится вокруг объекта DateTime, который
является основным типом для работы с датой и временем. В отличие от
нативного Date, который хранит только абсолютное время в
виде UTC-таймстампа, DateTime инкапсулирует контекст:
временную зону, локаль, календарные параметры и правила
форматирования.
DateTime — неизменяемый (immutable) объект, любое преобразование возвращает новый экземпляр, а не модифицирует существующий.
Ключевые свойства внутреннего состояния:
DateTime не является просто обёрткой над Date. Он
представляет собой абстракцию календарного момента с дополнительными
метаданными, что делает его фундаментальным типом всей библиотеки.
Тип Duration описывает промежуток времени без привязки к конкретной точке на временной шкале. В отличие от DateTime, он не содержит абсолютного момента.
Duration хранит значение в виде набора полей:
Особенность заключается в том, что Duration может быть:
Duration поддерживает арифметику:
Важно, что некоторые операции зависят от контекста календаря (например, месяцы имеют переменную длину), поэтому Duration не всегда может быть точно переведён в миллисекунды без потери смысла.
Interval представляет собой диапазон между двумя DateTime-значениями: началом и концом.
Структура Interval:
Основные свойства:
Interval оперирует логикой множества на временной оси, что делает его полезным для календарей, расписаний и планирования.
Ключевая особенность — строгое требование валидности границ: end не может быть раньше start.
Тип Zone определяет правила интерпретации времени. Это базовый интерфейс, который реализуется несколькими конкретными типами зон.
Zone отвечает за:
Основные реализации:
Zone не хранит время — он определяет контекст его чтения и отображения.
IANAZone использует базу tz database (например,
Europe/Moscow, Asia/Tokyo).
Свойства:
IANAZone является наиболее точной моделью реального времени, так как учитывает государственные и региональные изменения временных зон.
FixedOffsetZone представляет постоянное смещение относительно UTC без переходов и исторических изменений.
Примеры:
Характеристики:
Используется в случаях, где требуется неизменяемое смещение независимо от региона.
SystemZone отражает локальные настройки окружения (браузера или операционной системы).
Особенности:
SystemZone является прокси-типом, который делегирует логику системе исполнения.
Info — утилитарный тип, предоставляющий данные о календарных системах и локалях.
Он не представляет дату или время, а используется для получения справочной информации:
Info работает как статический поставщик данных и не хранит состояние.
Settings — глобальный конфигурационный слой библиотеки.
Отвечает за:
Особенность Settings заключается в том, что он влияет на создание всех DateTime-объектов, если параметры явно не указаны.
Это делает Settings глобальным контекстом выполнения временных операций.
Locale определяет правила форматирования и интерпретации:
Хотя Locale не всегда выделяется как отдельный класс, он является логическим типом внутри DateTime и Settings.
Locale влияет на:
toLocaleStringtoFormatLuxon поддерживает разные календарные системы, которые влияют на отображение дат.
Основные варианты:
OutputCalendar изменяет только отображение, не затрагивая внутренний timestamp.
Invalid представляет состояние некорректного DateTime или Duration.
Содержит:
Примеры причин:
Invalid является важным типом для безопасной работы, так как позволяет избегать silent failures.
Luxon активно использует структурную типизацию, особенно в TypeScript.
Ключевые внутренние типы:
Эти типы не являются пользовательскими классами, но определяют контракт API.
Все основные типы Luxon связаны через преобразования:
Эта система типов формирует единый граф взаимодействий, где каждый объект имеет строго определённую роль и не пересекается по ответственности с другими.
Все основные типы (DateTime, Duration, Interval) обладают неизменяемой природой. Это означает:
Каждая операция создаёт новый экземпляр, что формирует функциональный стиль работы с датой и временем.