Свойства offsetNameShort и offsetNameLong в
Luxon относятся к отображению человекочитаемых названий смещения
часового пояса, основанных на текущем временном сдвиге зоны относительно
UTC. Эти значения извлекаются из данных временной зоны и локали, а не
являются фиксированными строками, что делает их чувствительными к
сезонным изменениям (летнее/зимнее время) и региональным настройкам.
Каждая временная зона в Luxon представляет собой сочетание базового
идентификатора зоны (например, Europe/Moscow,
America/New_York) и текущего смещения относительно UTC.
Помимо численного смещения (+03:00, -05:00),
существует необходимость представлять это смещение в виде текстового
обозначения, привычного для пользователя.
В этом контексте:
offsetNameShort возвращает краткое имя смещения
(например, EST, EDT, GMT)offsetNameLong возвращает полное название смещения
(например, Eastern Standard Time,
Eastern Daylight Time,
Greenwich Mean Time)Оба свойства зависят от локали и могут различаться в зависимости от языковых настроек окружения.
В Luxon эти свойства доступны через объект DateTime,
который содержит информацию о времени и временной зоне.
import { DateTime } from "luxon";
const dt = DateTime.now().setZone("America/New_York");
console.log(dt.offsetNameShort);
console.log(dt.offsetNameLong);
При выполнении в период стандартного времени возможен результат:
EST
Eastern Standard Time
В период летнего времени:
EDT
Eastern Daylight Time
Таким образом, одно и то же свойство автоматически адаптируется к правилам перехода на летнее время.
Значения offsetNameShort и offsetNameLong
формируются на основе текущей зоны, установленной в объекте
DateTime. При смене зоны изменяется и интерпретация
смещения.
const moscow = DateTime.now().setZone("Europe/Moscow");
console.log(moscow.offsetNameShort);
console.log(moscow.offsetNameLong);
Для регионов без перехода на летнее время значения остаются стабильными в течение всего года, поскольку смещение не изменяется.
Luxon использует возможности Intl.DateTimeFormat для
получения локализованных названий временных зон. Это означает, что язык
системы или явно заданная локаль влияет на результат.
const dt = DateTime.now()
.setZone("Europe/Paris")
.setLocale("fr");
console.log(dt.offsetNameLong);
В зависимости от поддержки браузера или среды выполнения, результат может быть локализованным вариантом названия часового пояса.
Важно учитывать, что не все среды предоставляют полные наборы локализованных названий. В таких случаях Luxon может возвращать более общий вариант или fallback.
Следует различать числовое смещение и его текстовое представление:
offset — числовое значение в минутах относительно
UTCoffsetNameShort — краткое текстовое обозначениеoffsetNameLong — полное текстовое обозначениеПример:
const dt = DateTime.now().setZone("America/Los_Angeles");
console.log(dt.offset); // например, -420
console.log(dt.offsetNameShort); // PDT
console.log(dt.offsetNameLong); // Pacific Daylight Time
Числовое значение остаётся точным и однозначным, тогда как текстовые представления предназначены для отображения пользователю.
Для UTC поведение предсказуемо и не зависит от сезонных изменений:
const dt = DateTime.now().setZone("UTC");
console.log(dt.offsetNameShort); // GMT
console.log(dt.offsetNameLong); // Greenwich Mean Time
Для фиксированных смещений (например, UTC+2) возможны
упрощённые обозначения или отсутствие полноценного имени, в зависимости
от окружения.
При использовании .toFormat() эти свойства напрямую не
участвуют, однако могут быть включены через токены форматирования
временных зон:
const dt = DateTime.now().setZone("America/New_York");
console.log(dt.toFormat("ZZZZ")); // long name
console.log(dt.toFormat("ZZZ")); // short name
Поведение токенов связано с внутренней логикой форматирования Luxon и
также опирается на Intl.
Наиболее важная особенность offsetNameShort и
offsetNameLong заключается в их динамическом изменении в
зависимости от даты.
const winter = DateTime.fromISO("2024-01-15", { zone: "America/New_York" });
const summer = DateTime.fromISO("2024-07-15", { zone: "America/New_York" });
console.log(winter.offsetNameShort);
console.log(summer.offsetNameShort);
Результат демонстрирует смену EST на EDT,
что отражает переход между стандартным и летним временем.
Поведение этих свойств определяется не только Luxon, но и реализацией
Intl в среде выполнения:
Из-за этого значения offsetNameShort и
offsetNameLong следует рассматривать как вспомогательные
для отображения, а не как источник строгой логики времени.
Эти свойства применяются в задачах отображения временных зон пользователю:
При этом для вычислений используется исключительно числовое смещение и сама временная зона, а не её текстовое имя.