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-время.
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("Активное рабочее время в допустимом периоде");
}
Подобные конструкции применяются в планировщиках задач, логистике и системах уведомлений, где требуется учитывать сразу несколько временных факторов одновременно.