В библиотеке Day.js дедлайн обычно моделируется как фиксированная
временная точка, выраженная объектом Day.js. Такой подход позволяет
унифицировать сравнение, арифметику и форматирование дат без
необходимости работать с низкоуровневым Date.
import dayjs from 'dayjs';
const deadline = dayjs('2026-06-01T18:00:00');
Дедлайн в таком виде становится неизменяемой эталонной точкой, относительно которой выполняются все вычисления: проверка оставшегося времени, определение просрочки, расчёт интервалов.
При работе с дедлайнами критически важно избегать неоднозначности
форматов и часовых поясов. Day.js оперирует локальным временем по
умолчанию, поэтому для строгих систем часто подключаются плагины
utc и timezone.
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);
const deadlineUtc = dayjs.utc('2026-06-01T15:00:00Z');
const deadlineLocal = dayjs.tz('2026-06-01 18:00', 'Asia/Almaty');
Использование UTC устраняет эффект «смещения дедлайна» при смене региона пользователя.
Основная операция — определение, истёк ли срок. Для этого используются методы сравнения:
const now = dayjs();
const isExpired = now.isAfter(deadline);
Если необходимо строгое сравнение без учёта миллисекундных погрешностей:
const isExpired = now.isSameOrAfter(deadline);
Часто логика строится вокруг трёх состояний:
if (now.isBefore(deadline)) {
// активное задание
} else if (now.isSame(deadline)) {
// момент дедлайна
} else {
// просрочено
}
Для отображения прогресса или обратного отсчёта используется разница между текущим временем и дедлайном.
const minutesLeft = deadline.diff(dayjs(), 'minute');
Day.js поддерживает различные единицы измерения:
Для более сложных сценариев используется разложение на компоненты:
const diff = deadline.diff(dayjs());
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff / (1000 * 60 * 60)) % 24);
В системах планирования часто используются дедлайны, округлённые до конца дня или начала периода.
const endOfDayDeadline = dayjs().endOf('day');
const startOfDayDeadline = dayjs().startOf('day');
Такой подход применяется в задачах с дневными квотами, отчётностью или системами таск-трекинга.
Для предотвращения пограничных ошибок вводится буфер:
const safeDeadline = deadline.subtract(5, 'minute');
Буферное время используется в системах:
При сортировке задач используется прямое сравнение объектов:
const sorted = tasks.sort((a, b) => a.deadline.diff(b.deadline));
Где deadline — объект Day.js. Это обеспечивает
стабильную сортировку без преобразования в числа вручную.
Для определения попадания в интервал используется комбинация условий:
const isInRange =
now.isAfter(startDeadline) &&
now.isBefore(endDeadline);
При подключении isBetween логика становится
компактнее:
import isBetween from 'dayjs/plugin/isBetween';
dayjs.extend(isBetween);
const isInRange = now.isBetween(startDeadline, endDeadline);
Повторяющиеся сроки формируются через базовый шаблон и инкремент времени:
const baseDeadline = dayjs('2026-01-01T09:00:00');
const nextDeadline = baseDeadline.add(7, 'day');
Типовые паттерны:
add(1, 'day')add(1, 'week')add(1, 'month')Для триггеров уведомлений важно определять приближение к сроку:
const inOneHour = deadline.diff(dayjs(), 'hour') <= 1;
Более точная логика:
const isNearDeadline =
deadline.diff(dayjs(), 'minute') <= 30 &&
deadline.isAfter(dayjs());
В системах контроля задач дедлайн часто используется как жёсткий лимит исполнения:
function canExecute(task) {
return dayjs().isBefore(task.deadline);
}
Если задача выполняется асинхронно, добавляется проверка в процессе:
async function runTask(task) {
if (dayjs().isAfter(task.deadline)) return;
await task.execute();
if (dayjs().isAfter(task.deadline)) {
// результат может быть помечен как просроченный
}
}
В распределённых системах важно фиксировать момент создания дедлайна независимо от клиента:
const createdAt = dayjs().utc();
const deadline = createdAt.add(2, 'hour');
Такой подход исключает рассинхронизацию времени между устройствами.
Часто требуется человекочитаемое представление:
deadline.format('YYYY-MM-DD HH:mm:ss');
Для интерфейсов с локализацией:
import 'dayjs/locale/ru';
dayjs.locale('ru');
deadline.format('D MMMM YYYY, HH:mm');
Просроченные дедлайны могут приводить к отрицательным интервалам:
const diff = deadline.diff(dayjs());
if (diff < 0) {
// задача просрочена
}
Для отображения времени просрочки используется модуль абсолютного значения:
const overdueMinutes = Math.abs(diff) / (1000 * 60);
Объекты Day.js не мутируют исходные значения, каждая операция возвращает новый экземпляр:
const original = dayjs('2026-06-01');
const modified = original.add(1, 'day');
Это свойство позволяет безопасно строить цепочки вычислений дедлайнов без риска побочных эффектов.
const finalDeadline = dayjs()
.add(2, 'day')
.subtract(3, 'hour')
.endOf('hour');