Luxon построена вокруг нативного стандарта ECMAScript Internationalization API (Intl), который предоставляет браузерам и средам выполнения механизмы локализации дат, чисел и временных зон. Основная идея — отказ от собственных тяжёлых таблиц локалей и переход к системным возможностям окружения.
Ключевой фундамент: объекты Intl.DateTimeFormat,
Intl.NumberFormat, Intl.RelativeTimeFormat, а
также частично Intl.PluralRules. Именно через них Luxon
выполняет форматирование и интерпретацию локализованных значений.
Критически важное свойство: поведение библиотеки напрямую зависит от полноты и качества реализации Intl в конкретной среде выполнения.
Luxon не реализует собственную систему локализации. Вместо этого используется делегирование:
Intl.DateTimeFormatIntl.NumberFormatIntl.RelativeTimeFormatIntl.PluralRulesТакой подход даёт компактность кода и актуальность локалей без обновления библиотеки.
Для корректной работы базовых функций требуется:
Intl.DateTimeFormatОтсутствие хотя бы одного компонента приводит к деградации функциональности или ошибкам форматирования.
В актуальных версиях Chrome, Firefox, Safari и Edge Intl реализован полноценно:
Luxon в таких условиях использует системный ICU без ограничений.
В устаревших средах возможны ограничения:
Intl.RelativeTimeFormatВ подобных случаях Luxon продолжает работать, но часть API деградирует до базовых строковых представлений.
В Node.js поведение Intl зависит от сборки ICU (International Components for Unicode).
Минимальная сборка Node:
Luxon в этом режиме функционирует, но локализация может быть неполной.
Полная сборка Node:
Активируется через:
Luxon использует строковые идентификаторы локалей:
enrudeja-JPФактическое форматирование зависит от:
Если локаль недоступна, происходит fallback на базовую локаль среды выполнения.
Intl определяет:
Luxon передаёт параметры напрямую в
Intl.DateTimeFormat.
Пример логики:
DateTime.toLocaleString(DateTime.DATE_FULL)Функции вроде:
используют Intl.RelativeTimeFormat.
При отсутствии поддержки:
Luxon опирается на IANA идентификаторы:
Europe/MoscowAsia/AlmatyAmerica/New_YorkПоддержка зависит от:
Intl.supportedValuesOf('timeZone') (в современных
средах)В старых системах возможны:
Luxon при этом сохраняет объектную модель времени, но точность отображения может снижаться.
Внутренне проверяются ключевые возможности:
IntlIntl.DateTimeFormatresolvedOptions()timeZone опцииТиповая логика деградации:
При недостатке Intl Luxon не прекращает работу, но:
Цель — сохранить консистентность данных даже при ограничениях среды.
Для унификации поведения в разных окружениях применяются полифилы:
@formatjs/intl-datetimeformat@formatjs/intl-relativetimeformat@formatjs/intl-localefull-icu для Node.jsПолифилы обеспечивают:
В сборках через Webpack, Vite или Rollup Intl может:
Важно, что Luxon не тащит собственные локали, поэтому размер бандла остаётся стабильным.
Использование Intl накладывает системные ограничения:
Luxon сознательно принимает эти ограничения в обмен на:
Форматирование, основанное на Intl, влияет на:
toLocaleString)Даже одинаковый код Luxon может давать разные строки при смене окружения, если отличаются ICU или системные локали.
Поведение Luxon можно представить как слой над Intl:
Стабильность результата определяется не только логикой библиотеки, но и полнотой реализации Internationalization API в конкретной среде выполнения.