Методы DateTime

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)

Метод set позволяет создавать новый объект с изменёнными полями.

const upd ated = dt.se t({ hour: 18, minute: 0 })

Особенность: оригинальный dt остаётся неизменным.

Возможные поля:

  • year
  • month
  • day
  • hour
  • minute
  • second
  • millisecond
  • zone

Арифметика времени

plus

Добавление интервала:

dt.plus({ days: 3, hours: 2 })

Поддерживаемые единицы:

  • years
  • months
  • weeks
  • days
  • hours
  • minutes
  • seconds
  • milliseconds

minus

Вычитание интервала:

dt.minus({ months: 1, days: 10 })

Работает по тем же правилам, что и plus, но с обратным знаком.


Разность дат (diff)

Метод diff вычисляет разницу между двумя моментами времени.

const diff = dt1.diff(dt2, ['hours', 'minutes'])

Результат представляет объект Duration, содержащий выбранные единицы.

Часто используемые формы:

dt.diffNow('days')

Разница между текущим временем и dt.


Сравнение дат

equals

dt1.equals(dt2)

Проверяет полное совпадение всех компонентов времени.


hasSame

dt1.hasSame(dt2, 'day')

Позволяет сравнивать с точностью до уровня:

  • year
  • month
  • day
  • hour
  • minute

Работа с временными зонами

setZone

dt.setZone('Europe/Berlin')

Изменяет временную зону без изменения абсолютного момента времени.


toUTC

dt.toUTC()

Переводит дату в UTC.


toLocal

dt.toLocal()

Возвращает дату в локальную зону окружения.


Начало и конец временных интервалов

startOf

dt.startOf('day')

Обрезает дату до начала указанного периода.

Поддерживаемые уровни:

  • year
  • month
  • week
  • day
  • hour
  • minute
  • second

endOf

dt.endOf('month')

Возвращает конец указанного периода с максимальными значениями времени.


Форматирование даты

toISO

dt.toISO()

Возвращает строку в ISO 8601 формате.


toFormat

dt.toFormat('yyyy LLL dd HH:mm')

Гибкий метод форматирования с использованием токенов:

  • yyyy — год
  • MM — месяц
  • dd — день
  • HH — часы (24h)
  • mm — минуты

toLocaleString

dt.toLocaleString(DateTime.DATETIME_MED)

Использует встроенные форматы локализации:

  • DATE_SHORT
  • DATE_MED
  • DATETIME_FULL
  • TIME_SIMPLE

Преобразование в нативные типы

toJSDate

dt.toJSDate()

Преобразует DateTime в стандартный объект Date.


toMillis

dt.toMillis()

Возвращает UNIX timestamp в миллисекундах.


Проверка валидности

dt.isValid

Булево значение, указывающее корректность объекта.

При ошибке можно получить причину:

dt.invalidReason
dt.invalidExplanation

Манипуляции с календарём

setLocale

dt.setLocale('ru')

Изменяет локаль форматирования без изменения самого момента времени.


reconfigure

dt.reconfigure({ locale: 'ru', numberingSystem: 'latn' })

Позволяет тонко настраивать поведение объекта.


Сдвиги по времени с учётом календаря

Методы plus и minus учитывают календарные особенности:

  • разное количество дней в месяцах
  • високосные годы
  • переходы через границы зон

Это отличает их от простого арифметического сложения миллисекунд.


Нормализация и округление

toRelative

dt.toRelative()

Возвращает человеко-читаемое представление относительного времени.


toRelativeCalendar

dt.toRelativeCalendar()

Представляет дату относительно текущего момента: «через 2 дня», «вчера» и т.д.


Изменение точности и округление

round

dt.set({ millisecond: 0 })

Формального метода округления нет, но обнуление нижних компонентов используется для нормализации.


Извлечение и фильтрация компонентов

get

dt.get('month')

Альтернативный доступ к полям через строковый ключ.


hasSame и granular сравнение

Позволяет строить логические фильтры:

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()

Каждый шаг возвращает новый объект, формируя предсказуемую последовательность преобразований.