В библиотеке Luxon объект типа DateTime представляет
собой полноценную модель даты и времени с поддержкой временных зон,
локалей и календарной арифметики. Одним из ключевых методов для
извлечения структурированных данных из такого объекта является
toObject(), который преобразует экземпляр
DateTime в обычный JavaScript-объект с полями,
соответствующими компонентам даты и времени.
Метод возвращает простой объект, содержащий только те компоненты,
которые присутствуют в исходном DateTime. Это делает его
удобным для сериализации, передачи между слоями приложения или
частичного анализа даты без привязки к внутренним механизмам Luxon.
Базовая форма результата выглядит следующим образом:
{
year: number,
month: number,
day: number,
hour: number,
minute: number,
second: number,
millisecond: number
}
Каждое поле включается только при наличии соответствующей информации
в исходном объекте. Например, если DateTime создан без
указания времени, поля hour, minute,
second и millisecond могут отсутствовать.
DateTime.toObject(options?: Object): Object
Метод не изменяет исходный экземпляр. Он всегда возвращает новый объект.
Параметр options используется для контроля набора
возвращаемых полей.
toObject() может возвращать следующие компоненты:
Набор полей зависит от конфигурации и исходных данных
DateTime.
При вызове без аргументов метод возвращает максимально полный объект на основе текущего состояния:
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23, 14, 45);
const obj = dt.toObject();
Результат:
{
year: 2026,
month: 5,
day: 23,
hour: 14,
minute: 45,
second: 0,
millisecond: 0
}
Если исходный объект не содержит времени, соответствующие поля могут отсутствовать полностью.
Одной из особенностей метода является возможность получения только части данных. Это особенно полезно при работе с календарными вычислениями, где время не имеет значения.
const dateOnly = DateTime.local(2026, 5, 23).toObject({
includeOffset: false
});
В результате может быть получен объект вида:
{
year: 2026,
month: 5,
day: 23
}
Такой формат часто используется для хранения дат в базах данных, где время не требуется.
Luxon поддерживает расширенные календарные поля ISO-календаря, которые могут быть включены в результат:
const dt = DateTime.local(2026, 5, 23);
dt.toObject({ includeWeek: true });
Возможный результат:
{
year: 2026,
month: 5,
day: 23,
weekYear: 2026,
weekNumber: 21,
weekday: 6
}
Эти поля особенно полезны при работе с недельной аналитикой, графиками нагрузки и бизнес-отчетностью.
Если DateTime был создан без некоторых компонентов,
метод не заполняет их значениями по умолчанию, а просто исключает их из
результата. Это важное отличие от стандартных JavaScript-объектов
Date, которые всегда возвращают полный набор полей через
методы-геттеры.
Пример:
const dt = DateTime.local(2026);
dt.toObject();
Результат:
{
year: 2026
}
Метод возвращает значения уже в контексте локального времени объекта
DateTime. Если экземпляр создан с таймзоной, отличной от
системной, значения отражают именно эту зону.
const dt = DateTime.fromISO("2026-05-23T10:00:00", {
zone: "UTC"
});
dt.toObject();
Даже при локальной зоне пользователя результат будет соответствовать UTC-времени, если оно задано в объекте.
toObject() и toJSDate() решают разные
задачи:
toJSDate() возвращает объект DatetoObject() возвращает структурированный
plain-objectСравнение:
dt.toJSDate(); // Date
dt.toObject(); // { year, month, day, ... }
toObject() предпочтителен в случаях, когда требуется
сохранить отдельные компоненты времени, а не единую метку времени.
Результат toObject() легко сериализуется в JSON:
JSON.stringify(dt.toObject());
Это делает метод удобным для:
Объект, возвращаемый toObject(), можно использовать для
выборочного извлечения данных:
const { year, month, day } = dt.toObject();
Такой подход позволяет отделить календарную часть от временной, что часто требуется при построении интерфейсов календарей.
Поле millisecond присутствует только при наличии точного
времени. При создании объекта без указания долей секунды оно обычно
равно 0, но может отсутствовать в результате при
определённых конфигурациях:
DateTime.local(2026, 5, 23, 10, 0, 0, 0).toObject();
{
year: 2026,
month: 5,
day: 23,
hour: 10,
minute: 0,
second: 0,
millisecond: 0
}
Если исходный DateTime является невалидным
(Invalid DateTime), метод возвращает пустой объект:
DateTime.invalid("error").toObject();
Результат:
{}
Это позволяет безопасно проверять результат без дополнительных исключений.
Метод часто применяется в связке с другими функциями Luxon:
const normalized = DateTime.local()
.plus({ days: 5 })
.startOf("day")
.toObject();
Такой подход позволяет получать нормализованные структуры времени для дальнейших расчетов или хранения.
Метод не зависит от локали напрямую. Он не форматирует строки и не применяет языковые правила. Все возвращаемые данные являются числовыми компонентами, что исключает влияние региональных настроек на результат.
DateDateTimeПри включении календарных расширений объект может включать дополнительные свойства, связанные с ISO-неделями и порядковыми днями года. Это делает метод полезным в аналитических задачах, где календарные системы важнее стандартных календарных разбиений на месяц и день.