Метод engulfs относится к объекту Interval
в библиотеке Luxon и используется для определения того, полностью ли
один временной интервал содержит другой. Речь идёт не о частичном
пересечении, а именно о строгом включении границ одного интервала в
границы другого.
interval.engulfs(otherInterval)
Метод возвращает логическое значение, отражающее факт полного «поглощения» одного интервала другим:
true — если текущий интервал полностью включает
переданныйfalse — если хотя бы одна граница выходит за пределы
или интервалы не пересекаются корректноПод «включением» понимается ситуация, когда:
Иными словами, проверяется условие:
текущий интервал охватывает другой целиком
Пусть:
Тогда:
A.engulfs(B) ⇔ A.start ≤ B.start AND A.end ≥ B.end
Важно учитывать, что сравнение происходит с учётом временной зоны и
нормализованных значений DateTime.
Интервал в Luxon задаётся двумя объектами DateTime:
import { Interval, DateTime } 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);
Метод engulfs применяется именно к таким объектам.
import { Interval, DateTime } from "luxon";
const outer = Interval.fromDateTimes(
DateTime.fromISO("2026-01-01"),
DateTime.fromISO("2026-01-10")
);
const inner = Interval.fromDateTimes(
DateTime.fromISO("2026-01-03"),
DateTime.fromISO("2026-01-05")
);
outer.engulfs(inner); // true
Здесь внутренний интервал полностью лежит внутри внешнего.
const a = Interval.fromDateTimes(
DateTime.fromISO("2026-01-01"),
DateTime.fromISO("2026-01-05")
);
const b = Interval.fromDateTimes(
DateTime.fromISO("2026-01-04"),
DateTime.fromISO("2026-01-08")
);
a.engulfs(b); // false
Хотя интервалы пересекаются, второй выходит за пределы первого, поэтому включение отсутствует.
const a = Interval.fromDateTimes(
DateTime.fromISO("2026-01-01"),
DateTime.fromISO("2026-01-10")
);
const b = Interval.fromDateTimes(
DateTime.fromISO("2026-01-01"),
DateTime.fromISO("2026-01-10")
);
a.engulfs(b); // true
Равенство границ считается полным включением.
const a = Interval.fromDateTimes(
DateTime.fromISO("2026-01-01"),
DateTime.fromISO("2026-01-10")
);
const b = Interval.fromDateTimes(
DateTime.fromISO("2026-01-01"),
DateTime.fromISO("2026-01-05")
);
a.engulfs(b); // true
Совпадение начала допустимо.
const b = Interval.fromDateTimes(
DateTime.fromISO("2026-01-06"),
DateTime.fromISO("2026-01-10")
);
a.engulfs(b); // true
Совпадение конца также допустимо.
Если хотя бы один интервал невалиден
(isValid === false), результат всегда будет
false:
const invalid = Interval.invalid("error");
a.engulfs(invalid); // false
Метод engulfs часто путают с проверкой пересечения
(overlaps), но логика принципиально различается:
overlaps — есть ли хотя бы частичное пересечениеengulfs — полное включение одного интервала в
другойПример:
a.overlaps(b); // true
a.engulfs(b); // false
Luxon нормализует DateTime внутри интервалов, но важно,
что:
const a = Interval.fromDateTimes(
DateTime.fromISO("2026-01-01T00:00:00+03:00"),
DateTime.fromISO("2026-01-02T00:00:00+03:00")
);
const b = Interval.fromDateTimes(
DateTime.fromISO("2025-12-31T21:00:00Z"),
DateTime.fromISO("2026-01-01T21:00:00Z")
);
a.engulfs(b); // зависит от фактической нормализации, но сравнение идёт корректно по абсолютному времени
Метод используется для анализа вложенности временных блоков:
Пример логики:
if (workDay.engulfs(meeting)) {
// встреча полностью укладывается в рабочий день
}
const filtered = intervals.filter(i => mainRange.engulfs(i));
Результат — только те интервалы, которые полностью содержатся в заданном диапазоне.
Поведение метода включает границы интервала:
То есть используется закрытый интервал [start, end].
a.engulfs(b) // не заменяет overlaps
Метод не предназначен для поиска пересечений.
a.engulfs(b); // не эквивалентно b.engulfs(a)
Порядок важен, поскольку включение несимметрично.
Если start > end, интервал считается невалидным, и
результат будет false.
Метод engulfs реализует строгую проверку вложенности
временных интервалов на основе сравнения их начальных и конечных границ,
обеспечивая детерминированное поведение при работе с календарными и
временными структурами в Luxon.