В Luxon системный часовой пояс представляет собой базовую зону времени, которая автоматически определяется окружением выполнения JavaScript и используется как значение по умолчанию при создании объектов даты и времени без явного указания зоны. Эта концепция критична для корректной работы с локальным временем в браузерах и Node.js, поскольку поведение даты и времени напрямую зависит от настроек операционной системы или среды выполнения.
Системный часовой пояс — это временная зона, установленная в операционной системе или окружении, в котором выполняется код. В браузере она берётся из настроек устройства пользователя, в Node.js — из настроек сервера или переменных окружения.
Luxon опирается на стандартный API Intl.DateTimeFormat,
который предоставляет информацию о текущей зоне:
Intl.DateTimeFormat().resolvedOptions().timeZone
Это значение используется Luxon как основа для системной зоны.
Внутри Luxon системный часовой пояс представлен объектом зоны
SystemZone. Он является специальной реализацией зоны
времени, которая динамически ссылается на окружение выполнения.
При создании даты без указания зоны:
import { DateTime } from "luxon";
const dt = DateTime.now();
используется системная зона, эквивалентная:
DateTime.local()
Оба варианта опираются на SystemZone, если не изменено
глобальное поведение библиотеки.
Метод DateTime.local() создаёт объект даты и времени в
системной временной зоне. Это означает, что результат интерпретируется
согласно локальному времени устройства.
const dt = DateTime.local(2026, 5, 23, 10, 30);
В этом случае:
Luxon позволяет изменить поведение системной зоны через глобальную настройку:
import { Settings } from "luxon";
Settings.defaultZone = "system";
Значение "system" указывает явно использовать системный
часовой пояс как базовый.
Кроме этого, можно задать фиксированную зону:
Settings.defaultZone = "UTC";
После этого все операции без явного указания зоны будут выполняться в UTC, а системная зона перестаёт использоваться как дефолтная.
Luxon предоставляет доступ к текущей системной зоне через
Settings и объектные методы:
import { DateTime } from "luxon";
const zoneName = DateTime.local().zoneName;
Результат может быть, например:
"Europe/Moscow""Asia/Almaty""UTC"Также можно получить объект зоны:
const zone = DateTime.local().zone;
Этот объект является экземпляром SystemZone, если
используется системная конфигурация.
В браузерной среде системный часовой пояс зависит от устройства пользователя и его настроек операционной системы.
В Node.js поведение определяется:
TZ (если установлена)Пример влияния переменной окружения:
TZ=Asia/Tokyo node app.js
В этом случае Luxon будет интерпретировать системную зону как Asia/Tokyo независимо от физического местоположения сервера.
Системный часовой пояс включает правила DST (Daylight Saving Time), если они существуют для конкретной зоны. Luxon автоматически применяет корректные смещения.
const winter = DateTime.local(2026, 1, 15);
const summer = DateTime.local(2026, 7, 15);
Для зон с переходом на летнее время:
Luxon работает с IANA time zone database. Системная зона всегда сопоставляется с одним из IANA-идентификаторов.
Примеры:
Europe/BerlinAmerica/New_YorkAsia/AlmatyДаже если система возвращает локализованное имя, Luxon нормализует его в IANA формат.
Системная зона динамически зависит от окружения:
DateTime.local()
Фиксированная зона не меняется:
DateTime.now().setZone("UTC")
или
DateTime.fromObject({ zone: "UTC" })
Основное отличие:
При форматировании Luxon использует системную зону как базовую для локальных представлений:
const dt = DateTime.now();
console.log(dt.toString());
Результат включает смещение, соответствующее текущей системной зоне.
При выводе в ISO-формате:
dt.toISO();
сохраняется информация о смещении относительно UTC, вычисленная через SystemZone.
При создании даты из Unix-времени системная зона также применяется:
DateTime.fromMillis(1716450000000);
Значение интерпретируется как момент времени, но отображение и локализация зависят от системной зоны.
Luxon кэширует результат определения системной зоны для оптимизации
производительности. Однако при изменении окружения (например, смена
TZ в Node.js) в рамках одного процесса это может
потребовать перезапуска, чтобы корректно обновить системную
информацию.
Типичные проблемы возникают при:
TZВ таких случаях Luxon может возвращать UTC как fallback-зону или некорректно интерпретировать локальное время.
При операциях сложения и вычитания Luxon сохраняет привязку к системной зоне:
const dt = DateTime.local();
const nextDay = dt.plus({ days: 1 });
Обе даты остаются в одной логической временной зоне, что обеспечивает консистентность при календарных операциях.
Luxon позволяет явно переключаться между зонами:
const local = DateTime.local();
const utc = local.setZone("UTC");
В этом случае:
SystemZone служит связующим звеном между:
Она обеспечивает корректную интерпретацию локального времени без необходимости вручную указывать часовой пояс в большинстве сценариев работы с датами.