В библиотеке Luxon информация о временной зоне тесно связана с
объектом DateTime, который всегда содержит контекст зоны, в
которой интерпретируется момент времени. По умолчанию используется
системная временная зона среды выполнения (браузер или Node.js),
основанная на данных операционной системы и API Intl.
Основной способ получения зоны текущего окружения:
import { DateTime } from "luxon";
const now = DateTime.now();
console.log(now.zoneName);
zoneName возвращает строковый идентификатор временной
зоны в формате IANA, например:
"Europe/Paris""Asia/Almaty""UTC"Если среда не предоставляет полноценную IANA-зону, Luxon может отобразить смещение в виде фиксированной зоны.
Дополнительно доступен объект зоны:
console.log(now.zone);
zone содержит внутреннее представление зоны, реализующее
интерфейс Luxon Zone, через который вычисляются смещения и правила
перехода на летнее время.
Luxon опирается на стандарт IANA Time Zone Database. Каждая зона представляет собой не просто смещение, а набор правил:
Пример корректной зоны:
DateTime.local().setZone("Asia/Tokyo");
При этом Luxon не хранит собственный список зон, а делегирует
проверку и работу встроенному Intl API.
Для явного получения системной временной зоны используется тот же
объект DateTime, но важно понимать, что это не
фиксированное смещение, а динамическая зона:
const systemZone = DateTime.local().zoneName;
Также можно зафиксировать текущее смещение:
const offsetMinutes = DateTime.local().offset;
offset возвращает разницу с UTC в минутах на текущий
момент времени. Например:
-180 для UTC+3540 для UTC-9Luxon предоставляет дополнительные свойства для анализа временной зоны:
const dt = DateTime.now();
console.log(dt.offsetNameShort);
console.log(dt.offsetNameLong);
Типичные значения:
GMT+6 (короткое представление)Gulf Standard Time (длинное представление)Эти значения формируются через Intl.DateTimeFormat и
зависят от локали системы.
Luxon предоставляет утилиты через объект Info для работы
с зонами.
Проверка корректности IANA-зоны:
import { Info } from "luxon";
Info.isValidIANAZone("Asia/Almaty");
Результат:
true — зона существует и поддерживаетсяfalse — строка не соответствует IANA-формату или
отсутствует в базеЭта проверка полезна перед установкой пользовательских значений:
if (Info.isValidIANAZone(zoneString)) {
DateTime.local().setZone(zoneString);
}
Входящие строки временных зон могут быть нестабильными: разные API, пользовательский ввод или базы данных часто используют альтернативные обозначения.
Luxon предоставляет механизм нормализации:
Info.normalizeZone("utc");
Примеры нормализации:
"utc" → "UTC""gmt+3" → фиксированное смещение"Europe/Moscow" → каноническая форма IANAНормализация важна при построении систем, где временная зона приходит из внешних источников.
Не все среды одинаково поддерживают полноценную работу с временными
зонами. Проверка возможностей выполняется через
Info.features():
Info.features().zones;
Значение:
true — поддержка IANA-зон доступнаfalse — доступна только базовая работа со
смещениямиВ современных Node.js и браузерах с актуальным Intl
значение почти всегда равно true.
Информация о временной зоне тесно связана с методами преобразования даты:
const dt = DateTime.now().setZone("Asia/Almaty");
console.log(dt.zoneName);
После вызова setZone объект перестраивает внутреннюю
модель времени, сохраняя момент в UTC и пересчитывая локальное
представление.
Сравнение зон:
const a = DateTime.now().setZone("UTC");
const b = DateTime.now().setZone("Asia/Almaty");
console.log(a.zoneName);
console.log(b.zoneName);
Luxon различает:
Системную IANA-зону
Фиксированное смещение
Пример фиксированной зоны:
DateTime.fromObject(
{ hour: 10 },
{ zone: "UTC+6" }
);
Такие зоны полезны для протоколов и данных, где важна стабильность, а не региональные правила.
Luxon позволяет определить, действует ли летнее время в конкретный момент:
const dt = DateTime.now();
console.log(dt.isInDST);
Значение:
true — активен переход на летнее времяfalse — стандартное времяЭто свойство зависит от выбранной IANA-зоны и текущей даты.
Luxon использует глобальную настройку:
import { Settings } from "luxon";
Settings.defaultZoneName = "Europe/Paris";
После этого все создаваемые DateTime без явного указания
зоны будут использовать заданное значение.
Получение текущего значения:
console.log(Settings.defaultZoneName);
Объект zone внутри DateTime содержит:
Пример доступа:
const dt = DateTime.now();
console.log(dt.zone.name);
console.log(dt.zone.offset(dt.ts));
При передаче некорректной строки Luxon не всегда выбрасывает ошибку, а может использовать fallback:
DateTime.now().setZone("Invalid/Zone");
Поведение зависит от окружения:
Поэтому проверка через Info.isValidIANAZone остаётся
обязательной при внешнем вводе.
Любая временная зона в Luxon всегда может быть приведена к UTC:
const dt = DateTime.now();
const utc = dt.toUTC();
console.log(utc.zoneName);
Результат всегда:
"UTC"Это позволяет унифицировать хранение и сравнение времени независимо от локальных зон.
Luxon не содержит собственной базы временных зон. Все вычисления зависят от:
Intl.DateTimeFormatПо этой причине поведение: