Использование в условиях

Day.js широко используется в логике условных проверок времени благодаря компактному API и предсказуемому поведению при сравнении дат. Основная ценность библиотеки в условиях проявляется там, где требуется быстро и точно принимать решения на основе временных границ, интервалов и относительных сравнений.

Базовая логика условий строится вокруг методов isBefore, isAfter и isSame.

import dayjs from "dayjs";

const now = dayjs();
const deadline = dayjs("2026-06-01");

if (now.isBefore(deadline)) {
  console.log("Срок ещё не наступил");
}

if (now.isAfter(deadline)) {
  console.log("Срок уже прошёл");
}

if (now.isSame(deadline, "day")) {
  console.log("Срок сегодня");
}

Уровень точности сравнения задаётся вторым аргументом: "year", "month", "day", "hour", "minute", "second". Это позволяет строить условия не только на уровне конкретных миллисекунд, но и на уровне календарных единиц.

Условная логика с диапазонами времени

Для проверки попадания даты в диапазон используется плагин isBetween.

import dayjs from "dayjs";
import isBetween from "dayjs/plugin/isBetween";

dayjs.extend(isBetween);

const date = dayjs("2026-05-23");
const start = dayjs("2026-05-01");
const end = dayjs("2026-05-31");

if (date.isBetween(start, end, "day", "[]")) {
  console.log("Дата внутри диапазона");
}

Четвёртый аргумент управляет включением границ:

  • "()" — исключая обе границы
  • "[)" — включая начало
  • "(]" — включая конец
  • "[]" — включая обе границы

Такая конструкция применяется в фильтрации периодов подписок, акций и временных окон доступа.

Условия на основе разницы дат

Метод diff используется для построения числовых условий.

const a = dayjs("2026-01-01");
const b = dayjs("2026-01-10");

if (b.diff(a, "day") > 7) {
  console.log("Разница больше недели");
}

diff возвращает число, что позволяет комбинировать его с любыми логическими операторами:

  • > — превышение порога
  • < — недостижение
  • === — точное совпадение интервала

Особенность заключается в том, что результат зависит от единицы измерения: при "month" или "year" поведение становится календарным, а не арифметическим.

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

Любая условная логика с датами требует защиты от некорректных значений.

const date = dayjs("invalid-date");

if (date.isValid()) {
  console.log("Дата корректна");
} else {
  console.log("Некорректное значение");
}

Игнорирование этой проверки приводит к каскадным ошибкам при сравнении, так как операции с невалидной датой дают неконсистентные результаты.

Условные конструкции с цепочками методов

Day.js поддерживает цепочечный стиль, что позволяет строить компактные условия.

const date = dayjs();

if (date.add(3, "day").isAfter(dayjs("2026-06-01"))) {
  console.log("Через 3 дня будет позже контрольной даты");
}

Такая форма часто используется в бизнес-логике уведомлений и дедлайнов, где требуется предварительное смещение времени перед проверкой.

Условия с округлением времени

При сравнении дат часто возникает необходимость игнорировать точность до секунд или миллисекунд.

const a = dayjs("2026-05-23T10:15:00");
const b = dayjs("2026-05-23T10:15:59");

if (a.isSame(b, "minute")) {
  console.log("Одинаковая минута");
}

Округление уровня сравнения устраняет шум времени и делает условия предсказуемыми в пользовательских интерфейсах и расписаниях.

Условная логика для фильтрации массивов

Day.js часто используется внутри filter, где каждое условие зависит от даты.

const events = [
  { date: "2026-05-20" },
  { date: "2026-06-10" },
  { date: "2026-05-25" }
];

const filtered = events.filter(event => {
  const d = dayjs(event.date);
  return d.isAfter(dayjs("2026-05-21")) && d.isBefore(dayjs("2026-06-01"));
});

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

Условия с UTC и локальным временем

При работе с серверными данными часто требуется различать локальное и UTC-время.

import utc from "dayjs/plugin/utc";
dayjs.extend(utc);

const local = dayjs("2026-05-23T12:00:00");
const remote = dayjs.utc("2026-05-23T12:00:00");

if (!local.isSame(remote)) {
  console.log("Разные временные зоны");
}

Такое разделение критично в системах распределённых событий, где одинаковые временные метки могут интерпретироваться по-разному.

Условные ветвления на основе временных статусов

Day.js часто используется для моделирования статусов через switch-подобную логику.

const now = dayjs();
const start = dayjs("2026-05-01");
const end = dayjs("2026-06-01");

if (now.isBefore(start)) {
  console.log("Не началось");
} else if (now.isAfter(end)) {
  console.log("Завершено");
} else {
  console.log("Активно");
}

Такая структура применяется в управлении жизненным циклом объектов: задач, подписок, кампаний.

Условные проверки с относительными смещениями

Комбинация add, subtract и проверок позволяет строить прогнозные условия.

const now = dayjs();

if (now.add(1, "hour").isBefore(dayjs("2026-05-23T18:00:00"))) {
  console.log("Есть запас времени");
}

Это используется для оценки буферных интервалов, предупреждений и автоматических напоминаний.

Проверка крайних случаев в условиях

Особое внимание требуется ситуациям с границами месяцев и переходами лет.

const date = dayjs("2026-02-28");

if (date.add(1, "day").isSame(dayjs("2026-03-01"), "day")) {
  console.log("Переход месяца учтён корректно");
}

Day.js корректно обрабатывает такие переходы, что позволяет избегать ручной нормализации дат.

Условные проверки в многослойной логике

В сложных системах условия часто комбинируются:

const date = dayjs("2026-05-23");
const isWeekend = [0, 6].includes(date.day());
const isWorkingHours = date.hour() >= 9 && date.hour() < 18;

if (date.isAfter(dayjs("2026-05-01")) && isWorkingHours && !isWeekend) {
  console.log("Активное рабочее время в допустимом периоде");
}

Подобные конструкции применяются в планировщиках задач, логистике и системах уведомлений, где требуется учитывать сразу несколько временных факторов одновременно.