В библиотеке Luxon поведение всех операций с датой и временем во
многом определяется глобальным объектом настроек Settings.
Он задаёт единые параметры форматирования, локали, календарной системы,
часового пояса по умолчанию и стратегию получения текущего времени. Эти
параметры влияют на все создаваемые экземпляры DateTime,
если для них не указаны локальные переопределения.
Глобальные настройки особенно важны в приложениях, где требуется согласованность отображения времени в разных модулях без передачи параметров в каждый вызов.
Внутренний объект Settings централизует конфигурацию
библиотеки:
import { Settings } from "luxon";
Все свойства Settings являются статическими и изменяются
глобально для текущего окружения исполнения.
Основные группы параметров:
Параметр defaultLocale определяет язык и региональные
правила форматирования дат.
import { Settings } from "luxon";
Settings.defaultLocale = "ru";
После установки все операции форматирования используют русскую локаль, если не указано иное:
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23);
dt.toLocaleString(DateTime.DATE_FULL);
// например: "23 мая 2026 г."
Если defaultLocale не задан:
en-USdefaultZone определяет часовой пояс, который
используется при создании DateTime, если зона не передана
явно.
import { Settings } from "luxon";
Settings.defaultZone = "Europe/Moscow";
После этого:
import { DateTime } from "luxon";
const dt = DateTime.local();
dt.zoneName; // "Europe/Moscow"
Метод DateTime.local() не привязан к системной зоне
напрямую, если задан Settings.defaultZone. Это позволяет
унифицировать работу сервера и клиента.
При установке defaultZone важно учитывать:
Settings.defaultZone = "Asia/Almaty";
Luxon поддерживает различные системы записи чисел: латинскую, арабскую, индийскую и другие.
import { Settings } from "luxon";
Settings.defaultNumberingSystem = "latn";
Влияние проявляется при форматировании дат:
DateTime.local(2026, 5, 23).toLocaleString();
// "05/23/2026" (в зависимости от локали)
Для арабских систем:
Settings.defaultNumberingSystem = "arab";
Параметр управляет календарём, используемым при выводе дат.
import { Settings } from "luxon";
Settings.defaultOutputCalendar = "gregory";
Поддерживаются альтернативные системы:
gregory — григорианский календарь (по умолчанию)islamicbuddhisthebrewchineseИзменение календаря влияет только на представление, но не на внутренние расчёты времени.
Одним из ключевых механизмов является переопределение источника текущего времени.
По умолчанию:
Settings.now(); // Date.now()
Можно заменить:
Settings.now = () => 0;
После этого все операции, зависящие от текущего времени, будут использовать фиксированное значение.
import { Settings, DateTime } from "luxon";
Settings.now = () => 1700000000000;
const dt = DateTime.now();
dt.toMillis(); // 1700000000000
Это позволяет воспроизводить сценарии без зависимости от системных часов.
Настройка throwOnInvalid управляет тем, как библиотека
реагирует на некорректные даты.
import { Settings } from "luxon";
Settings.throwOnInvalid = true;
true — выбрасывается исключение при ошибке создания
DateTimefalse — возвращается объект с состоянием
Invalid DateTimeПример:
const dt = DateTime.fromISO("invalid-date");
dt.isValid; // false
dt.invalidReason; // причина ошибки
При включённом режиме:
Settings.throwOnInvalid = true;
DateTime.fromISO("invalid-date"); // исключение
При создании объекта DateTime применяется следующая
система приоритетов:
setZone, zone в
методе)Settings.defaultZoneПример:
Settings.defaultZone = "Europe/London";
const dt = DateTime.local(2026, 5, 23);
Если затем указана зона явно:
DateTime.local(2026, 5, 23, { zone: "Asia/Tokyo" });
глобальная настройка игнорируется.
Поскольку Settings является глобальным объектом,
изменения влияют на всё приложение.
Типичные сценарии изоляции:
Пример сохранения состояния:
const oldZone = Settings.defaultZone;
Settings.defaultZone = "UTC";
// операции
Settings.defaultZone = oldZone;
Глобальные параметры взаимодействуют между собой при форматировании:
defaultLocale определяет языкdefaultNumberingSystem влияет на цифрыdefaultOutputCalendar влияет на структуру датыdefaultZone влияет на вычисление времениПример комплексного эффекта:
Settings.defaultLocale = "ar";
Settings.defaultNumberingSystem = "arab";
Settings.defaultZone = "Asia/Riyadh";
DateTime.local().toLocaleString(DateTime.DATETIME_FULL);
Результат будет зависеть одновременно от всех четырёх параметров.
Luxon не предоставляет единого метода сброса, поэтому возврат к исходным значениям выполняется вручную:
Settings.defaultLocale = "en-US";
Settings.defaultZone = "system";
Settings.defaultNumberingSystem = null;
Settings.defaultOutputCalendar = null;
Settings.throwOnInvalid = false;
Settings.now = () => Date.now();
Глобальные настройки влияют не только на вывод, но и на разбор строк:
defaultLocaletoLocaleStringПример:
Settings.defaultLocale = "fr";
DateTime.local().toLocaleString(DateTime.DATE_FULL);
defaultZone часто игнорируется при явной работе с
IntldefaultLocale берётся из
navigator.languageprocess.env.TZ)Глобальные настройки обычно фиксируются на этапе инициализации приложения:
import { Settings } from "luxon";
Settings.defaultLocale = "ru";
Settings.defaultZone = "Europe/Moscow";
Settings.throwOnInvalid = false;
После этого дальнейшая работа с датами опирается на единый контекст форматирования и вычислений.