Метод contains() используется в объекте
Interval библиотеки Luxon и предназначен для проверки,
находится ли заданный момент времени внутри интервала. Это один из
базовых инструментов для работы с временными диапазонами, поскольку
позволяет выполнять логические проверки принадлежности даты к промежутку
без ручных сравнений.
interval.contains(dateTime)
Параметр:
dateTime — экземпляр DateTime из Luxon
(или значение, приводимое к DateTime)Возвращаемое значение:
boolean
true — если момент времени находится внутри
интервалаfalse — если момент времени вне интервалаИнтервал в Luxon представляет собой диапазон между двумя точками времени:
start — начало интервалаend — конец интервалаМетод contains() проверяет принадлежность по
правилу:
Иными словами:
start <= dateTime < end
Такой подход соответствует распространённой практике работы с временными диапазонами, где верхняя граница не включается, чтобы избежать пересечений интервалов.
import { DateTime, Interval } from "luxon";
const start = DateTime.fromISO("2026-01-01T00:00:00");
const end = DateTime.fromISO("2026-01-10T00:00:00");
const interval = Interval.fromDateTimes(start, end);
const checkDate = DateTime.fromISO("2026-01-05T12:00:00");
interval.contains(checkDate); // true
Здесь дата попадает внутрь интервала, поскольку находится между началом и концом диапазона.
const start = DateTime.fromISO("2026-01-01T00:00:00");
const end = DateTime.fromISO("2026-01-10T00:00:00");
const interval = Interval.fromDateTimes(start, end);
interval.contains(start); // true
interval.contains(end); // false
Это ключевая особенность, которая часто становится источником логических ошибок при работе с диапазонами.
Luxon строго учитывает временные зоны, поскольку
DateTime всегда содержит информацию о зоне.
const start = DateTime.fromISO("2026-01-01T00:00:00", { zone: "UTC" });
const end = DateTime.fromISO("2026-01-02T00:00:00", { zone: "UTC" });
const interval = Interval.fromDateTimes(start, end);
const local = DateTime.fromISO("2026-01-01T23:00:00", { zone: "UTC" });
interval.contains(local); // true
Если сравниваются значения в разных зонах, Luxon автоматически нормализует их к абсолютному времени.
Частый сценарий — проверка, попадает ли текущее время в заданный интервал.
const interval = Interval.fromDateTimes(
DateTime.now().minus({ hours: 1 }),
DateTime.now().plus({ hours: 1 })
);
interval.contains(DateTime.now()); // true
Если интервал некорректен (например, отсутствует start
или end), результат будет предсказуемо ложным:
const interval = Interval.fromDateTimes(
DateTime.fromISO("2026-01-10"),
DateTime.fromISO("2026-01-01")
);
interval.isValid; // false
interval.contains(DateTime.now()); // false
Luxon не пытается «исправлять» перевёрнутые интервалы, поэтому проверка валидности важна перед использованием.
Метод возвращает false для всех значений, которые:
startendconst start = DateTime.fromISO("2026-01-01T00:00:00");
const end = DateTime.fromISO("2026-01-10T00:00:00");
const interval = Interval.fromDateTimes(start, end);
const before = DateTime.fromISO("2025-12-31T23:59:59");
const after = DateTime.fromISO("2026-01-10T00:00:00");
interval.contains(before); // false
interval.contains(after); // false
Luxon сравнивает даты с точностью до миллисекунд. Это означает, что даже минимальное смещение влияет на результат.
const start = DateTime.fromISO("2026-01-01T00:00:00.000");
const end = DateTime.fromISO("2026-01-01T00:00:01.000");
const interval = Interval.fromDateTimes(start, end);
interval.contains(DateTime.fromMillis(start.toMillis())); // true
interval.contains(DateTime.fromMillis(end.toMillis())); // false
if (workingHours.contains(DateTime.now())) {
// сервис доступен
}
const events = allEvents.filter(event =>
event.interval.contains(DateTime.now())
);
function isBookingAllowed(interval, date) {
return interval.contains(date);
}
Эквивалент без contains() выглядел бы так:
const dateMillis = date.toMillis();
dateMillis >= start.toMillis() && dateMillis < end.toMillis();
Метод contains() инкапсулирует эту логику, снижая
вероятность ошибок и повышая читаемость кода.
Intervaloverlaps)DateTime объектов LuxonЕсли передан некорректный аргумент:
interval.contains(null);
результат будет false, так как значение не может быть
интерпретировано как дата.
overlaps() — проверка пересечения интерваловengulfs() — полное включение одного интервала в
другойabutsStart() и abutsEnd() — проверка
касания границisBefore() и isAfter() — относительное
положение интервалов