Luxon изначально проектировалась как слой поверх нативных
возможностей JavaScript для работы со временем, но при этом сохраняет
тесную интеграцию с объектами и API платформы. Основной принцип
взаимодействия с нативными API заключается в том, что библиотека не
изолирует календарные данные от окружения выполнения, а выступает
адаптером между различными представлениями даты и времени:
Date, Intl, ISO-строки, временные зоны
операционной системы и серверные настройки локали.
Базовым нативным представлением времени в JavaScript остаётся
Date. Несмотря на наличие ограничений (мутабельность,
отсутствие поддержки таймзон на уровне экземпляра, неоднозначность
парсинга), он используется как универсальный транспортный формат.
В Luxon предусмотрены прямые механизмы преобразования:
создание из Date:
DateTime.fromJSDate(date)обратное преобразование:
dateTime.toJSDate()При преобразовании Date → DateTime происходит
нормализация:
При обратном преобразовании:
DateTimeDate, содержащий миллисекунды
UNIX epochТакой подход позволяет использовать Luxon как слой доменной логики
поверх системных API без потери совместимости с существующим кодом,
завязанным на Date.
Нативные JavaScript API частично поддерживают ISO 8601, однако поведение неоднородно между средами выполнения. Luxon стандартизирует этот слой через строгую работу с ISO-представлениями.
Основные операции:
парсинг:
DateTime.fromISO(isoString)сериализация:
dateTime.toISO()Поддерживаются расширенные форматы ISO:
2026-01-24T12:30:002026-01-24T12:30:00+06:00ZХотя new Date(string) использует ISO-подобный формат,
его поведение зависит от движка. Luxon избегает этой
неопределённости:
Date.parseНативный объект Intl является ключевым элементом
локализации в JavaScript. Luxon строится поверх него и делегирует
форматирование и получение локальных данных системным реализациям.
Форматирование внутри Luxon основано на:
Intl.DateTimeFormatIntl.NumberFormat (косвенно, при форматировании чисел
компонентов времени)Пример внутренней логики:
IntlDateTimeLuxon использует системные локали:
navigator.language (в браузере)process.env.LANG и системные настройки (в Node.js)Основные механизмы:
DateTime.local().setLocale('ru')toLocaleString()toLocaleDateString()toLocaleTimeString()Intl)Нативный JavaScript Date не хранит таймзону, а
использует системную при интерпретации. Luxon вводит явную модель:
DateTime содержит timezoneEurope/Moscow,
Asia/Almaty, UTCПолучение текущей зоны:
DateTime.local().zoneNameИспользование системной зоны:
DateTime.local() создаёт объект в зоне окруженияПри взаимодействии с Date:
Date всегда представляет UTC-epochПоскольку Luxon опирается на Intl и окружение:
local()Нативный JSON.stringify не поддерживает
DateTime напрямую. Luxon решает это через явную
сериализацию.
toISO()toJSON() (алиас ISO-представления)При передаче в API:
DateTime.fromISO(jsonString)Важная особенность взаимодействия:
Date-парсингаНативный API предоставляет Date.now(), возвращающий
epoch milliseconds.
Luxon использует этот механизм как основу:
DateTime.now() опирается на
Date.now()DateTime.fromMillis(ms) принимает значение
напрямуюБольшинство серверных систем используют один из стандартных форматов:
Luxon адаптирует все три модели:
DateTime.fromSeconds()DateTime.fromMillis()toSeconds()toMillis()При взаимодействии с БД:
Нативный JavaScript не предоставляет полноценной модели операций над
временем. Luxon использует Duration и
Interval, но при этом опирается на базовые числовые
представления.
DatesetTimeout,
setIntervalLuxon не модифицирует поведение event loop, но часто используется совместно с:
setTimeoutPromiseasync/awaitПри этом:
Date.now()Методы структурного копирования (structuredClone) не
поддерживают DateTime напрямую как специализированный тип с
сохранением поведения.
Подходы:
fromISOtoObject() для промежуточного
представленияСтруктура объекта:
Интеграция Luxon с нативными API зависит от реализации платформы:
IntlIntlLuxon часто выступает посредником между:
Date)Expires)Во всех случаях применяется конвертация:
DateDateTimeIntl