DateTime в Luxon представляет собой неизменяемую сущность, инкапсулирующую момент времени с учётом временной зоны, календарных операций и локализации. Любая операция над экземпляром DateTime возвращает новый объект, сохраняя исходный неизменным, что устраняет типичные проблемы мутабельных дат в JavaScript.
Базовые методы создания экземпляров позволяют гибко формировать дату из разных источников данных.
Текущий момент времени
DateTime.now()
Создаёт объект, соответствующий текущему времени в локальной временной зоне окружения.
DateTime.local()
Аналогично now, но явно указывает на локальную зону,
используется для читаемости и явного семантического разделения.
DateTime.utc()
Создаёт объект в UTC, исключая влияние локальной временной зоны.
Создание из компонентов даты
DateTime.fromObject({
year: 2026,
month: 5,
day: 24,
hour: 12,
minute: 30
})
Метод позволяет задавать только нужные поля, остальные заполняются значениями по умолчанию (обычно нулями или текущими).
Создание из строки ISO
DateTime.fromISO("2026-05-24T10:15:00")
ISO-формат является стандартом для обмена датами. Метод корректно интерпретирует временную зону, если она указана.
Создание из JavaScript Date
DateTime.fromJSDate(new Date())
Позволяет интегрироваться с нативным объектом Date, преобразуя его в полноценный DateTime.
Создание из миллисекунд
DateTime.fromMillis(1716547200000)
Используется при работе с UNIX timestamp в миллисекундах.
DateTime предоставляет методы для извлечения компонентов времени без преобразования в строки.
dt.year
dt.month
dt.day
dt.hour
dt.minute
dt.second
dt.millisecond
Каждое свойство возвращает соответствующую часть даты.
Дополнительно:
dt.weekday // день недели (1–7)
dt.ordinal // день года
dt.weekNumber // номер недели
Метод set позволяет создавать новый объект с изменёнными
полями.
const upd ated = dt.se t({ hour: 18, minute: 0 })
Особенность: оригинальный dt остаётся неизменным.
Возможные поля:
Добавление интервала:
dt.plus({ days: 3, hours: 2 })
Поддерживаемые единицы:
Вычитание интервала:
dt.minus({ months: 1, days: 10 })
Работает по тем же правилам, что и plus, но с обратным
знаком.
Метод diff вычисляет разницу между двумя моментами
времени.
const diff = dt1.diff(dt2, ['hours', 'minutes'])
Результат представляет объект Duration, содержащий выбранные единицы.
Часто используемые формы:
dt.diffNow('days')
Разница между текущим временем и dt.
dt1.equals(dt2)
Проверяет полное совпадение всех компонентов времени.
dt1.hasSame(dt2, 'day')
Позволяет сравнивать с точностью до уровня:
dt.setZone('Europe/Berlin')
Изменяет временную зону без изменения абсолютного момента времени.
dt.toUTC()
Переводит дату в UTC.
dt.toLocal()
Возвращает дату в локальную зону окружения.
dt.startOf('day')
Обрезает дату до начала указанного периода.
Поддерживаемые уровни:
dt.endOf('month')
Возвращает конец указанного периода с максимальными значениями времени.
dt.toISO()
Возвращает строку в ISO 8601 формате.
dt.toFormat('yyyy LLL dd HH:mm')
Гибкий метод форматирования с использованием токенов:
dt.toLocaleString(DateTime.DATETIME_MED)
Использует встроенные форматы локализации:
dt.toJSDate()
Преобразует DateTime в стандартный объект Date.
dt.toMillis()
Возвращает UNIX timestamp в миллисекундах.
dt.isValid
Булево значение, указывающее корректность объекта.
При ошибке можно получить причину:
dt.invalidReason
dt.invalidExplanation
dt.setLocale('ru')
Изменяет локаль форматирования без изменения самого момента времени.
dt.reconfigure({ locale: 'ru', numberingSystem: 'latn' })
Позволяет тонко настраивать поведение объекта.
Методы plus и minus учитывают календарные
особенности:
Это отличает их от простого арифметического сложения миллисекунд.
dt.toRelative()
Возвращает человеко-читаемое представление относительного времени.
dt.toRelativeCalendar()
Представляет дату относительно текущего момента: «через 2 дня», «вчера» и т.д.
dt.set({ millisecond: 0 })
Формального метода округления нет, но обнуление нижних компонентов используется для нормализации.
dt.get('month')
Альтернативный доступ к полям через строковый ключ.
Позволяет строить логические фильтры:
if (dt.hasSame(other, 'month')) { ... }
Каждый метод модификации возвращает новый экземпляр:
const a = dt.plus({ days: 1 })
const b = dt.plus({ days: 1 })
a === b // false
Это делает DateTime безопасным для функциональных цепочек преобразований.
Поддерживается композиция вызовов:
const result = DateTime.now()
.setZone('UTC')
.plus({ days: 2 })
.startOf('day')
.toISO()
Каждый шаг возвращает новый объект, формируя предсказуемую последовательность преобразований.