DateTime.fromObject создаёт объект даты и времени в
Luxon на основе переданного структурированного объекта полей. Метод
используется, когда значения времени уже разложены по компонентам (год,
месяц, день и т. д.), либо когда требуется собрать DateTime
без предварительного парсинга строки.
Формально:
DateTime.fromObject(obj: DateObjectUnits, opts?: DateTimeOptions): DateTime
Главная особенность метода заключается в том, что он работает не с текстовым представлением даты, а с набором отдельных числовых и конфигурационных параметров, что делает его основным инструментом для программного конструирования дат.
Первый аргумент метода — объект, содержащий календарные и временные поля. Эти поля интерпретируются как компоненты даты:
year — полный годmonth — месяц (1–12)day — день месяца (1–31)hour — часы (0–23)minute — минуты (0–59)second — секунды (0–59)millisecond — миллисекунды (0–999)Минимально допустимый набор зависит от контекста. Например, можно создать дату только с годом и месяцем, но отсутствие дня будет заменено значениями по умолчанию.
Пример частичного объекта:
DateTime.fromObject({
year: 2025,
month: 6
})
В таком случае Luxon автоматически подставляет:
day = 1hour = 0minute = 0second = 0millisecond = 0Luxon выполняет нормализацию входных значений. Это означает, что некорректные или выходящие за пределы значения не всегда приводят к ошибке, а приводятся к корректной дате.
Пример:
DateTime.fromObject({
year: 2025,
month: 13,
day: 40
})
Поведение:
month: 13 интерпретируется как январь следующего
годаday: 40 приводит к переходу на следующий месяцТаким образом, результат будет автоматически пересчитан в корректный календарный момент времени.
Это поведение важно учитывать при работе с пользовательскими или вычисляемыми данными, где возможны переполнения.
Второй аргумент метода позволяет задать дополнительные параметры конфигурации, включая временную зону.
DateTime.fromObject(
{
year: 2026,
month: 1,
day: 1,
hour: 12
},
{
zone: 'Europe/Paris'
}
)
Ключ zone определяет, в каком часовом поясе будет
интерпретирована дата.
Особенности:
zone используется системная временная зона
окруженияEurope/Paris,
Asia/Almaty, UTC)Второй аргумент также поддерживает:
locale — локаль (например, ru,
en, de)numberingSystem — система числового представленияoutputCalendar — календарная система (григорианский,
исламский и др.)Пример:
DateTime.fromObject(
{
year: 2026,
month: 5,
day: 23
},
{
locale: 'ru',
numberingSystem: 'latn'
}
)
Эти параметры не изменяют саму дату, но влияют на форматирование и интерпретацию при выводе.
При отсутствии части полей Luxon использует стандартные значения:
| Поле | Значение по умолчанию |
|---|---|
| day | 1 |
| hour | 0 |
| minute | 0 |
| second | 0 |
| millisecond | 0 |
Пример:
DateTime.fromObject({ year: 2024 })
Результат: 1 января 2024 года, 00:00:00.000
Если входные данные полностью некорректны (например, отсутствует
год), результатом будет Invalid DateTime.
const dt = DateTime.fromObject({
month: 5,
day: 10
})
dt.isValid // false
Luxon требует хотя бы базовую календарную основу для построения даты.
Luxon допускает выход за стандартные границы единиц времени и автоматически перераспределяет значения.
Пример:
DateTime.fromObject({
year: 2025,
month: 1,
day: 32
})
Результат будет интерпретирован как 1 февраля 2025 года.
Аналогично:
DateTime.fromObject({
hour: 25
})
Превратится в +1 день и 1 час.
Такое поведение делает метод устойчивым к накопительным расчётам времени, но требует осторожности при строгой валидации.
fromObject принципиально отличается от
fromISO, fromFormat и других методов
парсинга:
Пример сравнения:
DateTime.fromISO('2026-05-23T10:00')
DateTime.fromObject({
year: 2026,
month: 5,
day: 23,
hour: 10
})
Первый вариант ориентирован на строковые данные, второй — на программную генерацию.
При необходимости базировать объект на текущем времени используется
комбинирование с DateTime.now():
const now = DateTime.now()
const modified = DateTime.fromObject({
year: now.year,
month: now.month,
day: now.day,
hour: 12
})
Такой подход позволяет частично модифицировать текущую дату без строкового парсинга.
Luxon использует календарную модель, в которой:
Это важно при миграции с систем, где используется 0-based индексация
месяцев (например, JavaScript Date).
Пример ошибки переноса:
// JavaScript Date: месяц 0 = январь
// Luxon: месяц 1 = январь
DateTime.fromObject({
year: 2026,
month: 0
})
Результат будет интерпретирован как декабрь предыдущего года после нормализации.
Поле millisecond позволяет задавать высокоточное
время:
DateTime.fromObject({
year: 2026,
month: 5,
day: 23,
hour: 10,
minute: 30,
second: 15,
millisecond: 250
})
Luxon хранит точность до миллисекунды, что делает метод применимым в задачах логирования и синхронизации событий.
Результатом fromObject всегда является экземпляр
DateTime, который поддерживает цепочки преобразований:
const dt = DateTime.fromObject({
year: 2026,
month: 5,
day: 23
})
dt.plus({ days: 5 }).set({ hour: 8 })
Метод часто используется как начальная точка для дальнейших операций над временем, где важно задать базовую дату без парсинга строковых форматов.