Объект Interval в Luxon описывает непрерывный промежуток времени между двумя точками — началом и концом. Он строится поверх DateTime и наследует всю точность работы с календарными датами, при этом добавляет операции над временными диапазонами: проверку пересечений, разбиение, объединение и вычисление длительности.
Интервалы в Luxon создаются несколькими способами, каждый из которых отражает разные сценарии работы с временными диапазонами.
Interval.fromDateTimes(start, end) Базовый способ создания интервала из двух объектов DateTime.
Interval.fromDateTimes(DateTime.local(2026, 1, 1), DateTime.local(2026, 1, 10))
Если конечная точка меньше начальной, интервал становится невалидным,
что фиксируется через isValid.
Interval.fromISO(string, opts) Позволяет создавать интервал из ISO-строки.
Interval.fromISO("2026-01-01/2026-01-10")
Поддерживаются форматы с разделителем /, где левая часть
— начало, правая — конец.
Interval.fromObject({ start, end }) Универсальный способ создания через объектную форму.
Interval.fromObject({
start: DateTime.local(2026, 1, 1),
end: DateTime.local(2026, 1, 10)
})
Interval.after(dateTime, duration) Создаёт интервал, начинающийся после заданной точки.
Interval.after(DateTime.local(2026, 1, 1), Duration.fromObject({ days: 5 }))
Конец интервала вычисляется автоматически.
Interval.before(dateTime, duration) Формирует интервал, заканчивающийся в указанной точке времени.
Interval.before(DateTime.local(2026, 1, 10), Duration.fromObject({ days: 5 }))
start / end Доступ к границам интервала.
interval.start
interval.end
Оба значения являются объектами DateTime.
isValid Проверка корректности интервала.
Интервал считается невалидным, если:
interval.isValid
length Длина интервала в миллисекундах.
interval.length
Возвращает число, отражающее разницу между end и start.
contains(dateTime) Определяет, входит ли момент времени в интервал.
interval.contains(DateTime.local(2026, 1, 5))
Границы обычно включаются: start ≤ t ≤ end.
Interval поддерживает операции над двумя временными диапазонами, что позволяет строить сложную логику планирования.
engulfs(otherInterval) Проверяет, полностью ли один интервал покрывает другой.
intervalA.engulfs(intervalB)
Истина возвращается, если:
overlaps(otherInterval) Проверяет наличие пересечения.
intervalA.overlaps(intervalB)
Пересечение существует, если хотя бы часть диапазонов совпадает.
intersection(otherInterval) Возвращает новый интервал пересечения.
const inter = intervalA.intersection(intervalB)
Если пересечения нет — результат невалидный интервал.
union(otherInterval) Объединяет два пересекающихся или смежных интервала.
const united = intervalA.union(intervalB)
Если интервалы не пересекаются и не касаются, операция может вернуть невалидный результат.
equals(otherInterval) Проверяет полное совпадение границ.
intervalA.equals(intervalB)
Совпадение требует идентичности start и end.
splitAt(…dateTimes) Разбивает интервал по указанным точкам.
interval.splitAt(
DateTime.local(2026, 1, 3),
DateTime.local(2026, 1, 6)
)
Результатом является массив подынтервалов, отсортированных по времени.
Особенности:
splitBy(duration) Разбиение на равные части по длительности.
interval.splitBy(Duration.fromObject({ days: 2 }))
Используется для сегментации диапазонов на равные отрезки.
Если интервал не делится ровно, последний сегмент будет короче.
mapEndpoints(mapFn) Позволяет преобразовать границы интервала.
interval.mapEndpoints(dt => dt.plus({ days: 1 }))
Функция применяется отдельно к start и end, возвращая новый интервал.
Используется для:
toISO() Возвращает строковое представление интервала в ISO-формате.
interval.toISO()
Результат:
2026-01-01T00:00:00.000Z/2026-01-10T00:00:00.000Z
toString() Человеко-читаемое строковое представление.
interval.toString()
Используется для отладки и логирования.
toDuration(unit?) Преобразует интервал в Duration.
interval.toDuration()
Можно указать единицы измерения:
interval.toDuration("days")
Результат отражает разницу между start и end в форме Duration.
Интервал в Luxon строго опирается на корректность границ:
Проверка isValid становится обязательной при
динамическом формировании диапазонов.
Интервалы Luxon включают обе границы по умолчанию. Это влияет на:
Граничные значения считаются частью интервала, что важно при работе с календарными периодами (дни, недели, месяцы).
Interval часто используется как основа цепочек операций:
Комбинация методов позволяет строить полноценные системы планирования, календарные движки и анализ временных данных без ручной арифметики дат.