Именованные часовые пояса IANA (Internet Assigned Numbers Authority Time Zones) представляют собой стандартизированную систему идентификаторов часовых поясов, используемую во всех современных средах работы с датами и временем. В контексте Luxon именно IANA-идентификаторы являются базовым механизмом описания временных зон и управления локальным временем.
Основной принцип системы IANA заключается в использовании стабильных
строковых идентификаторов вида Region/City, например
Europe/Moscow, Asia/Almaty,
America/New_York. Эти значения описывают не просто смещение
относительно UTC, а полноценную временную зону с историей изменений,
правилами перехода на летнее время и региональными корректировками.
IANA-таймзоны строятся по иерархическому принципу:
Примеры:
Europe/LondonEurope/BerlinAsia/AlmatyAsia/TokyoAmerica/Los_AngelesКлючевая особенность заключается в том, что идентификатор описывает не просто географию, а исторически сложившийся набор правил времени. Например, разные города внутри одной страны могут иметь разные правила перехода на летнее время или вовсе их не использовать.
Внутренняя модель времени в Luxon опирается на концепцию неизменяемого объекта DateTime, где временная зона является важной частью состояния. Использование IANA позволяет:
В отличие от простых смещений (+05:00,
-07:00), IANA-зона описывает полную временную модель
региона.
В Luxon установка временной зоны осуществляется через свойство
zone.
import { DateTime } from "luxon";
const dt = DateTime.fromObject(
{ year: 2026, month: 5, day: 23, hour: 10 },
{ zone: "Asia/Almaty" }
);
В этом случае дата интерпретируется сразу в контексте указанной зоны.
const now = DateTime.now().setZone("Europe/Berlin");
Метод setZone не изменяет исходный момент времени, а
лишь пересчитывает его представление в другой временной зоне.
В Luxon важно различать два подхода:
+06:00Пример смещения:
DateTime.fromISO("2026-05-23T10:00:00+06:00");
Пример IANA-зоны:
DateTime.fromISO("2026-05-23T10:00:00", { zone: "Asia/Almaty" });
Разница заключается в том, что смещение не учитывает переходы во времени, тогда как IANA-зона автоматически применяет все правила календаря региона.
При использовании IANA Luxon выполняет несколько шагов:
Таким образом, один и тот же момент времени может отображаться по-разному в зависимости от зоны:
const dt = DateTime.fromISO("2026-01-01T12:00:00Z");
dt.setZone("Asia/Tokyo").toString();
dt.setZone("America/New_York").toString();
Luxon позволяет задавать зону по умолчанию:
import { Settings } from "luxon";
Settings.defaultZone = "Europe/Moscow";
После этого все создаваемые даты без явного указания зоны будут интерпретироваться в этом контексте.
Это особенно важно для серверных приложений, где системная временная зона может отличаться от бизнес-логики приложения.
У каждого объекта DateTime есть свойство zoneName:
const dt = DateTime.now().setZone("Asia/Tokyo");
console.log(dt.zoneName); // Asia/Tokyo
Также доступен объект зоны:
console.log(dt.zone);
Он содержит внутреннее представление временной зоны и используется Luxon для вычислений.
Смена зоны не изменяет абсолютный момент времени:
const base = DateTime.fromISO("2026-05-23T10:00:00", {
zone: "Asia/Almaty"
});
const converted = base.setZone("Europe/London");
В результате:
base и converted указывают на один и тот
же момент UTCIANA-зоны включают правила DST (Daylight Saving Time), что приводит к неоднозначным или пропущенным моментам времени.
Пример неоднозначного времени:
Luxon обрабатывает такие случаи через настройки disambiguation:
DateTime.fromISO("2026-10-25T02:30", {
zone: "Europe/Berlin",
setZone: true
});
В зависимости от конфигурации может быть выбрано:
На практике чаще всего используются:
UTC — универсальное координированное времяEurope/London — ВеликобританияEurope/Berlin — Центральная ЕвропаAsia/Almaty — КазахстанAsia/Tokyo — ЯпонияAmerica/New_York — восточное время СШАAmerica/Los_Angeles — западное побережье СШАLuxon поддерживает полный IANA database, поэтому список не ограничен этими значениями.
Наиболее распространённые проблемы:
Asia/KZ вместо Asia/Almaty)IANA-зоны являются фундаментом, на котором строится вся модель временных операций:
Внутренне Luxon всегда оперирует абсолютным временем (UTC-moment), а IANA-зона отвечает за интерпретацию этого момента в конкретном регионе.
При выводе даты зона влияет на результат:
const dt = DateTime.now().setZone("Asia/Almaty");
dt.toFormat("yyyy-MM-dd HH:mm ZZZZ");
Форматирование учитывает:
В серверных архитектурах IANA-зоны используются для:
Luxon обеспечивает предсказуемое поведение независимо от операционной системы, поскольку опирается на стандартизированную базу временных зон.