Во всех основных методах разбора строк в объекты времени
DateTime библиотека Luxon принимает дополнительный параметр
— объект опций. Он позволяет управлять тем, как именно интерпретируется
входная строка: в какой временной зоне она находится, какая локаль
используется при разборе, как обрабатываются календарные и числовые
системы, а также изменяется ли зона после парсинга.
Ключевая особенность подхода Luxon заключается в том, что строка и контекст её интерпретации разделены. Одна и та же строка может давать разные результаты в зависимости от переданных опций.
Почти все методы разбора поддерживают следующий шаблон:
DateTime.fromISO(text, options)DateTime.fromSQL(text, options)DateTime.fromRFC2822(text, options)DateTime.fromFormat(text, format, options)DateTime.fromMillis(ms, options)DateTime.fromSeconds(sec, options)Объект options может включать:
zonesetZonelocalenumberingSystemoutputCalendarВ некоторых случаях (например, fromFormat) добавляются
специфические параметры, такие как strict.
Опция zone задаёт временную зону, в которой будет
интерпретирована дата при разборе строки.
Пример поведения:
DateTime.fromISO("2026-05-23T10:00:00", { zone: "Europe/Moscow" })
Если строка не содержит явного смещения (например, Z или
+03:00), Luxon будет считать, что время относится к
указанной зоне.
zone
не переопределяет исходное значениеsetZoneОпция setZone изменяет поведение интерпретации входной
строки, если в ней уже есть информация о временной зоне.
DateTime.fromISO("2026-05-23T10:00:00+03:00", {
zone: "UTC",
setZone: true
})
setZone: false (по умолчанию):
zone может влиять только на строки без
зоныsetZone: true:
zonesetZone используется, когда важно сохранить исходный
временной контекст события, например:
Опция locale влияет на интерпретацию текстовых
компонентов даты, особенно при использовании
fromFormat.
DateTime.fromFormat("23 мая 2026", "d MMMM yyyy", {
locale: "ru"
})
Если локаль не указана, используется системная или глобальная настройка Luxon.
Опция numberingSystem определяет, какие символы
используются для цифр.
DateTime.fromFormat("٢٣/٠٥/٢٠٢٦", "dd/MM/yyyy", {
numberingSystem: "arab"
})
Эта опция критически важна при разборе данных, полученных из локализованных интерфейсов, где цифры могут быть визуально отличны от привычных ASCII-символов.
Опция outputCalendar управляет календарём, который
используется внутри объекта DateTime.
DateTime.fromISO("2026-05-23", {
outputCalendar: "islamic"
})
gregory (григорианский календарь)islamicbuddhistchineseКалендарь влияет не только на отображение, но и на внутренние вычисления дат. При этом ISO-строка остаётся входным стандартом, а календарь — способом представления результата.
Метод fromFormat является наиболее гибким и требует
точного соответствия шаблону.
DateTime.fromFormat("23-05-2026 14:30", "dd-MM-yyyy HH:mm", {
locale: "ru",
zone: "Europe/Moscow",
strict: true
})
Опция strict включает жёсткую проверку соответствия
строки формату.
strict: true
Invalid DateTimestrict: false (по умолчанию)
Если строка неполная, Luxon использует текущую дату как базу.
Пример:
DateTime.fromFormat("14:30", "HH:mm")
В этом случае:
При необходимости избежать такого поведения требуется явное
управление базовыми значениями через дополнительные методы, например
.set() после разбора.
Комбинация zone и locale влияет на два
разных уровня:
zone — физическое время (смещение, UTC)locale — культурная интерпретация (форматы, текст)Пример:
DateTime.fromISO("2026-05-23T10:00:00", {
zone: "Asia/Tokyo",
locale: "ru"
})
Здесь:
Если разбор не удался, Luxon возвращает объект DateTime,
помеченный как невалидный.
Проверка:
const dt = DateTime.fromFormat("invalid", "dd-MM-yyyy");
dt.isValid // false
Дополнительно доступны диагностические поля:
invalidReasoninvalidExplanationfromFormat)При конфликте параметров действует следующая логика:
zonesetZone: true сохраняет исходную зону строкиlocale влияет только на текстовые компонентыnumberingSystem применяется до интерпретации чиселoutputCalendar влияет на внутреннее представление
результатаDateTime.fromISO("2026-05-23T10:00:00Z", options)
ZDateTime.fromSQL("2026-05-23 10:00:00", options)
optionsDateTime.fromISO("2026-05-23T10:00:00+03:00", {
zone: "UTC"
})
Фактически:
zone не переписывает её без setZoneЕсли строка содержит текстовые месяцы, но не задан
locale, разбор может быть некорректным или не выполниться
вовсе.
При несоответствии системы цифр входные данные могут выглядеть корректно, но не парситься.
При проектировании систем разбора дат обычно выделяются три уровня управления:
fromFormat, fromISO)locale,
numberingSystemzone,
setZone, outputCalendarРазделение этих уровней позволяет точно управлять тем, как именно строка превращается в объект времени, исключая неоднозначность интерпретации в многорегиональных приложениях.