Библиотека Luxon опирается на встроенный в среду выполнения ECMAScript Internationalization API (Intl). Корректность форматирования дат, локалей и часовых поясов напрямую зависит от полноты реализации Intl в браузере или Node.js, а также от доступного набора ICU-данных.
Luxon использует стандартный объект Intl для выполнения
ключевых операций:
Intl.DateTimeFormat)timeZoneКритическое требование заключается в наличии следующих возможностей:
Intl.DateTimeFormat с поддержкой опции
timeZoneformatToPartsМинимальная среда без Intl или с урезанным ICU приводит к деградации функциональности Luxon: форматирование становится ограниченным, а поддержка часовых поясов — неполной.
Luxon не содержит собственной базы локалей. Все языковые правила делегируются Intl.
new Intl.DateTimeFormat('ru-RU', {
dateStyle: 'full',
timeStyle: 'long'
}).format(new Date());
Поведение такого кода полностью определяет движок JavaScript. Luxon лишь оборачивает и стандартизирует использование Intl.
Ключевые зависимости:
В средах с ограниченными ICU (например, Node.js с small-icu) часть локалей может отсутствовать, что приводит к fallback на en-US.
В Node.js Intl зависит от сборки движка V8 и подключённой ICU-библиотеки.
Существуют три основных режима:
Luxon требует, чтобы Intl.DateTimeFormat корректно
поддерживал:
timeZonehourCycleweekday, month, year (для
гибких форматов)formatToPartsБез этих возможностей многие методы
DateTime.toLocaleString() становятся непредсказуемыми.
Одно из ключевых требований Luxon — наличие полноценной поддержки IANA time zones через Intl.
Пример зависимости:
Intl.DateTimeFormat('en-US', {
timeZone: 'Europe/Moscow',
dateStyle: 'long'
}).format(new Date());
Если среда не поддерживает:
timeZoneто Luxon не может корректно выполнять:
DateTime.setZone()В современных браузерах и Node.js (≥ 13+) поддержка обычно присутствует, но поведение зависит от сборки ICU.
В браузерных средах Luxon опирается на реализацию Intl в движке:
Критические различия:
formatToPartsdateStyle/timeStyletimeZone может отличаться в старых
сборкахLuxon не выполняет собственную нормализацию этих различий — он полностью делегирует Intl.
В средах с неполным Intl используются полифиллы:
@formatjs/intl-datetimeformat@formatjs/intl-localeintl (устаревший пакет для Node.js)Полифиллы обычно добавляют:
formatToPartsПример подключения:
import '@formatjs/intl-datetimeformat/polyfill';
import '@formatjs/intl-datetimeformat/locale-data/ru';
После подключения Luxon начинает использовать расширенные возможности
через глобальный Intl.
Перед использованием Luxon в ограниченных средах часто проверяется наличие критичных возможностей:
const hasTimeZone = (() => {
try {
return 'timeZone' in Intl.DateTimeFormat().resolvedOptions();
} catch {
return false;
}
})();
const supportsFormatToParts = (() => {
try {
return typeof Intl.DateTimeFormat().formatToParts === 'function';
} catch {
return false;
}
})();
Эти проверки определяют, будет ли Luxon работать в полном режиме или с деградацией функциональности.
Luxon рассчитан на современные версии стандарта ECMAScript, в которых Intl стабилен и полностью интегрирован:
Temporal-like операций через DateTime API
LuxonIntl.DateTimeFormatВ более старых средах требуется транспиляция и полифиллы, поскольку отсутствуют:
formatToPartstimeZoneIntl выполняет роль системного слоя, а Luxon — логического слоя над ним:
DateTime,
Duration, Interval)Таким образом, Luxon не является автономной системой работы с датами, а полностью зависит от корректной и полной реализации Intl в среде выполнения.