Доступ к компонентам объекта DateTime в Luxon реализован через неизменяемые свойства и набор методов, обеспечивающих извлечение календарных, временных и контекстных характеристик даты без необходимости ручного парсинга или работы с нативным объектом Date.
Экземпляр DateTime инкапсулирует множество полей, отражающих как локальные календарные значения, так и параметры временной зоны:
Каждое из этих значений доступно через прямые свойства объекта.
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23, 14, 30);
dt.year; // 2026
dt.month; // 5
dt.day; // 23
dt.hour; // 14
dt.minute; // 30
dt.second; // 0
Доступ к компонентам осуществляется без вызова функций, что упрощает чтение и делает код предсказуемым в контексте неизменяемой модели данных.
Календарные компоненты отражают позицию даты в григорианском календаре и используются при построении интерфейсов, отчетов и вычислений:
Базовые элементы даты предоставляются напрямую:
dt.year; // полный год
dt.month; // месяц (1–12)
dt.day; // день месяца (1–31)
Эти значения не зависят от временной зоны после создания объекта, поскольку DateTime фиксирует момент времени в выбранном контексте.
Порядковый номер дня в году позволяет работать с годовыми интервалами без разбиения на месяцы:
dt.ordinal;
Используется при построении годовых графиков, накопительных расчетов и систем учета.
Компонент weekday возвращает числовое представление дня недели:
dt.weekday; // 1 (понедельник) ... 7 (воскресенье)
Это значение удобно для локализации логики расписаний и фильтрации событий по рабочим и выходным дням.
Квартальная структура определяется через:
dt.quarter; // 1–4
Используется в финансовых и аналитических расчетах.
Временная часть DateTime представлена стандартными единицами измерения:
dt.hour;
dt.minute;
dt.second;
dt.millisecond;
Эти поля позволяют извлекать точные временные значения без преобразования строки или использования нативного Date.
Luxon предоставляет дополнительные свойства, вычисляемые на основе текущего состояния даты:
dt.daysInMonth;
Значение зависит от месяца и учитывает високосные годы.
dt.daysInYear;
Позволяет учитывать особенности календарного цикла при расчетах длительных периодов.
dt.isInLeapYear;
Используется для корректного построения календарных интервалов.
Каждый экземпляр DateTime содержит информацию о временной зоне и смещении относительно UTC:
dt.offset; // смещение в минутах
dt.zoneName; // идентификатор зоны
Смещение позволяет переводить локальное время в универсальное представление и обратно.
Компонент locale определяет форматирование и интерпретацию календарных значений:
dt.locale;
Он влияет на:
Любой экземпляр DateTime может находиться в валидном или невалидном состоянии:
dt.isValid;
dt.invalidReason;
dt.invalidExplanation;
При ошибках парсинга или некорректных входных данных объект сохраняется, но помечается как невалидный, что исключает необходимость выбрасывания исключений в большинстве сценариев обработки дат.
Для извлечения полного набора полей используется метод преобразования в объект:
dt.toObject();
Результат содержит структуру со всеми доступными компонентами:
{
year: 2026,
month: 5,
day: 23,
hour: 14,
minute: 30,
second: 0,
millisecond: 0
}
Этот подход удобен при сериализации или передаче данных между слоями приложения.
Хотя прямой доступ к компонентам осуществляется через свойства, Luxon предоставляет дополнительные способы извлечения значений через форматирование:
dt.toFormat("yyyy-MM-dd HH:mm");
Форматирование не заменяет доступ к компонентам, но используется для их композиции в строковые представления.
Модель доступа в Luxon основана на неизменяемости:
Это влияет на способ работы с компонентами: извлечение значений не требует копирования или клонирования объекта, поскольку данные уже структурированы и неизменяемы.
При работе с локальными компонентами важно учитывать возможность преобразования в UTC-контекст:
dt.toUTC().hour;
Компоненты могут отличаться в зависимости от временной зоны, но структура доступа остаётся идентичной.
Компоненты DateTime применяются напрямую в арифметике дат через создание новых экземпляров:
dt.plus({ days: 1 }).day;
dt.minus({ months: 1 }).month;
Доступ к компонентам после трансформации позволяет отслеживать изменения состояния даты без промежуточных преобразований.