Сравнение моментов времени в Luxon выполняется через методы, которые
позволяют определить относительное положение одного объекта DateTime
относительно другого. Среди них ключевыми являются after и
before, возвращающие булевы значения и используемые для
логической проверки порядка дат без необходимости вручную сравнивать
числовые представления времени.
Объекты DateTime в Luxon представляют собой точку во
времени с учётом временной зоны и календарной системы. При сравнении
учитывается не строковое представление и не локальный формат, а
абсолютное значение момента времени.
Важно понимать, что сравнение корректно работает только между
валидными экземплярами DateTime. Любой объект, созданный с
ошибкой парсинга, будет считаться невалидным и приведёт к некорректному
результату при проверках.
afterМетод after определяет, наступает ли текущий момент
времени позже указанного.
import { DateTime } from "luxon";
const dt1 = DateTime.fromISO("2026-05-23T10:00:00");
const dt2 = DateTime.fromISO("2026-05-23T09:00:00");
dt1.after(dt2); // true
dt2.after(dt1); // false
Семантически метод эквивалентен проверке строгого неравенства
> в контексте времени.
Особенности поведения:
false, если хотя бы один объект
невалиден;false.const a = DateTime.fromISO("2026-05-23T10:00:00Z");
const b = DateTime.fromISO("2026-05-23T10:00:00Z");
a.after(b); // false
beforeМетод before выполняет обратную проверку: находится ли
текущий момент времени раньше указанного.
import { DateTime } from "luxon";
const dt1 = DateTime.fromISO("2026-05-23T08:00:00");
const dt2 = DateTime.fromISO("2026-05-23T09:00:00");
dt1.before(dt2); // true
dt2.before(dt1); // false
С точки зрения логики он соответствует строгому неравенству
<.
Как и after, метод:
false при равенстве;const a = DateTime.fromISO("2026-05-23T10:00:00+03:00");
const b = DateTime.fromISO("2026-05-23T07:00:00Z");
a.before(b); // может быть false или true в зависимости от нормализации к UTC
Одним из ключевых аспектов работы after и
before является приведение времени к единой шкале
сравнения. Luxon внутри использует абсолютное время (UTC-основание),
поэтому различие в локальных часовых поясах не влияет на корректность
сравнения.
const msk = DateTime.fromISO("2026-05-23T12:00:00+03:00");
const utc = DateTime.fromISO("2026-05-23T09:00:00Z");
msk.equals(utc); // true
msk.after(utc); // false
msk.before(utc); // false
Здесь важно различать равенство и относительные проверки:
after и before не учитывают равенство как
положительный результат.
Методы часто применяются при работе с массивами дат, особенно при фильтрации событий или построении временных интервалов.
const now = DateTime.now();
const events = [
DateTime.fromISO("2026-05-20T10:00:00"),
DateTime.fromISO("2026-05-25T10:00:00"),
DateTime.fromISO("2026-06-01T10:00:00")
];
const futureEvents = events.filter(e => e.after(now));
Аналогично можно выделить прошедшие события:
const pastEvents = events.filter(e => e.before(now));
При работе с интервалами времени after и
before позволяют формировать логические условия включения и
исключения границ.
const start = DateTime.fromISO("2026-05-01T00:00:00");
const end = DateTime.fromISO("2026-05-31T23:59:59");
const point = DateTime.fromISO("2026-05-15T12:00:00");
point.after(start) && point.before(end); // проверка попадания в диапазон
Такая конструкция часто используется вместо создания отдельных объектов Interval, если требуется только логическая проверка.
Хотя для сортировки обычно применяются числовые представления
(toMillis()), методы after и
before могут использоваться в компараторах для повышения
читаемости логики.
events.sort((a, b) => {
if (a.before(b)) return -1;
if (a.after(b)) return 1;
return 0;
});
Такой подход явно выражает смысл сравнения, избегая арифметических операций.
Поведение методов становится важным в ситуациях с:
Invalid DateTime);const invalid = DateTime.fromISO("not-a-date");
const valid = DateTime.now();
valid.after(invalid); // false
valid.before(invalid); // false
При проектировании логики обработки времени это требует
предварительной валидации через isValid.
Хотя Luxon предоставляет специализированные методы, их поведение эквивалентно числовому сравнению временных меток:
after → toMillis() > toMillis()before → toMillis() < toMillis()const a = DateTime.now();
const b = DateTime.now();
a.after(b) === (a.toMillis() > b.toMillis());
a.before(b) === (a.toMillis() < b.toMillis());
Разница заключается в читаемости и встроенной обработке временных зон и валидности объектов.