Luxon опирается на стандартные возможности окружения JavaScript (ICU / Intl), поэтому поведение библиотеки в значительной степени определяется региональными настройками среды выполнения: браузера или Node.js. Это создаёт единый подход к локализации, но одновременно требует понимания ограничений конкретной платформы.
Локаль определяет правила отображения дат, времени, чисел и текстовых элементов календаря: порядок дня и месяца, названия месяцев, формат 12/24 часа, символы разделителей.
В Luxon локаль задаётся на уровне объекта DateTime или
глобально через настройки.
import { Settings } from "luxon";
Settings.defaultLocale = "ru";
После установки все новые экземпляры DateTime используют
русскую локаль, если не переопределено явно.
import { DateTime } from "luxon";
const dt = DateTime.now().setLocale("fr");
Такой объект будет форматироваться по правилам французской локали независимо от глобальных настроек.
Методы форматирования используют
Intl.DateTimeFormat:
DateTime.now().setLocale("de").toLocaleString();
Результат зависит от региона:
ru → 23.05.2026 14:30en → 5/23/2026, 2:30 PMde → 23.5.2026, 14:30Luxon использует предустановленные шаблоны
toLocaleString, которые адаптируются под локаль.
DateTime.now().toLocaleString(DateTime.DATE_SHORT);
DateTime.now().toLocaleString(DateTime.DATETIME_MED);
DateTime.now().toLocaleString(DateTime.TIME_WITH_SECONDS);
Каждый формат автоматически перестраивается под регион:
. / -)const dt = DateTime.fromISO("2026-05-23T14:30:00");
dt.setLocale("en").toLocaleString(DateTime.DATETIME_MED);
dt.setLocale("ru").toLocaleString(DateTime.DATETIME_MED);
Одинаковая дата отображается в разных региональных формах без изменения исходного значения.
Региональные особенности часто пересекаются с часовыми поясами. Luxon использует IANA Time Zone Database.
DateTime.now().setZone("Europe/Moscow");
DateTime.now().setZone("Asia/Almaty");
Часовой пояс влияет на:
import { Settings } from "luxon";
Settings.defaultZone = "utc";
Теперь все даты интерпретируются как UTC, если явно не указано иначе.
Локаль и зона работают независимо:
Пример:
DateTime.fromISO("2026-05-23T14:30:00Z")
.setZone("Asia/Tokyo")
.setLocale("ja")
.toLocaleString(DateTime.DATETIME_FULL);
Luxon использует Intl.NumberFormat для региональных
различий в:
Пример:
DateTime.now().setLocale("fr").toLocaleString();
Во французской локали могут использоваться пробелы вместо запятых в числах времени.
Региональные настройки определяют отображение календарных элементов:
DateTime.now().setLocale("ru").toFormat("LLLL cccc");
Вывод:
LLLL → месяц (январь, февраль…)cccc → день недели (понедельник…)Разные локали:
en → Monday, Januaryru → понедельник, январьes → lunes, eneroМетод toFormat позволяет задавать шаблон, но локаль
влияет на текстовые элементы:
DateTime.now()
.setLocale("it")
.toFormat("cccc, dd LLLL yyyy");
Числа остаются структурными, но названия месяцев и дней локализуются.
При парсинге строк локаль критична:
DateTime.fromFormat("23.05.2026", "dd.MM.yyyy", {
locale: "ru"
});
Ошибочная локаль приводит к неверному разбору:
MM.dd.yyyy vs dd.MM.yyyyРегиональные различия затрагивают календарную неделю.
DateTime.now().setLocale("en").weekday;
DateTime.now().setLocale("ru").weekday;
Влияние:
Luxon использует правила локали через ICU.
Формат времени зависит от региона:
DateTime.now().setLocale("en-US").toLocaleString(DateTime.TIME_SIMPLE);
DateTime.now().setLocale("ru-RU").toLocaleString(DateTime.TIME_SIMPLE);
Типичные различия:
en-US → 2:30 PMru-RU → 14:30Luxon не содержит встроенных переводов. Он полностью зависит от ICU:
Если локаль недоступна, происходит fallback:
Settings.defaultLocale = "xx-XX";
Результат:
en или системная локальISO строки (toISO) не зависят от локали:
DateTime.now().toISO();
Всегда возвращает:
Это делает ISO универсальным форматом обмена между регионами.
Luxon использует григорианский календарь, но локаль влияет на отображение:
Поддержка альтернативных календарей ограничена возможностями Intl API среды.
При использовании toRelative и
toRelativeCalendar локаль критична:
DateTime.now().plus({ days: 1 }).toRelative({ locale: "ru" });
Примеры:
ru → «завтра»en → «tomorrow»de → «morgen»Реальные приложения часто комбинируют настройки:
DateTime.now()
.setZone("Asia/Almaty")
.setLocale("ru")
.toLocaleString(DateTime.DATETIME_FULL);
Поведение определяется трёхуровневой моделью:
При передаче данных между системами региональные настройки не сохраняются:
JSON.stringify(DateTime.now())
В сериализации остаётся только ISO-представление, без локали и зоны отображения.
Региональные настройки требуют единообразной стратегии:
Settings.defaultLocale и
Settings.defaultZoneВ системах с пользователями из разных стран обычно применяется модель:
setLocaleТакой подход исключает неоднозначность интерпретации даты и времени при смене региона пользователя.