Свойство offset в объекте DateTime
библиотеки Luxon представляет собой числовое значение смещения временной
зоны относительно UTC, выраженное в минутах. Оно отражает текущую
разницу между локальным временем заданной зоны и всемирным
координированным временем.
Любой момент времени в Luxon может быть представлен в разных
временных зонах. Несмотря на то что сам момент (instant) не меняется,
его локальное отображение зависит от часового пояса. Свойство
offset фиксирует именно эту разницу:
Значение всегда измеряется в минутах, что позволяет точно учитывать не только часовые, но и полчасовые и 45-минутные смещения, используемые в некоторых регионах мира.
В Luxon offset доступен как вычисляемое свойство
экземпляра DateTime:
import { DateTime } from "luxon";
const dt = DateTime.local();
console.log(dt.offset);
Возвращаемое значение зависит от локальной временной зоны среды выполнения.
Luxon тесно связывает offset с объектом зоны
(zone), который определяет правила вычисления локального
времени.
const dt = DateTime.now().setZone("Europe/Berlin");
console.log(dt.offset);
Для зоны Europe/Berlin значение будет изменяться в
зависимости от периода года из-за перехода на летнее и зимнее время.
Одной из ключевых особенностей offset является
динамическое изменение при учёте DST (Daylight Saving Time).
Например:
Luxon автоматически пересчитывает offset при работе с
зонами, поддерживающими сезонные изменения.
const winter = DateTime.fromISO("2025-01-15", { zone: "Europe/Berlin" });
const summer = DateTime.fromISO("2025-07-15", { zone: "Europe/Berlin" });
console.log(winter.offset);
console.log(summer.offset);
Некоторые временные зоны не используют переход на летнее время и
имеют фиксированное смещение. В таких случаях offset
остаётся постоянным.
const dt = DateTime.now().setZone("UTC+5");
console.log(dt.offset);
Такие зоны полезны при работе с системами, где требуется стабильное смещение без сезонных изменений.
При создании объекта в UTC значение offset всегда равно
нулю:
const dt = DateTime.utc();
console.log(dt.offset); // 0
Это связано с тем, что UTC является базовой временной шкалой без смещения.
В Luxon помимо числового offset существует строковое
представление смещения:
offset — числовое значение в минутахoffsetNameShort — короткое текстовое представление
(например, GMT+2)offsetNameLong — полное название смещенияconst dt = DateTime.now().setZone("Asia/Almaty");
console.log(dt.offset);
console.log(dt.offsetNameShort);
console.log(dt.offsetNameLong);
offset используется для вычислений, тогда как строковые
представления предназначены для отображения.
Свойство offset не задаётся напрямую. Оно всегда
вычисляется на основе временной зоны:
const dt1 = DateTime.now().setZone("America/New_York");
const dt2 = DateTime.now().setZone("Asia/Tokyo");
console.log(dt1.offset);
console.log(dt2.offset);
Разница между значениями отражает разницу между временными зонами в данный момент времени.
При вычислении offset Luxon учитывает:
Это делает значение зависимым не только от зоны, но и от даты.
Хотя offset редко используется напрямую для
форматирования времени, он полезен при низкоуровневых вычислениях:
function convertToUTCMinutes(dt) {
return dt.toUTC().toMillis() + dt.offset * 60000;
}
offset не учитывает:
Он отражает только текущую разницу в минутах между локальным временем и UTC для конкретного момента времени.