Работа с временными интервалами является одной из ключевых задач при
обработке дат: фильтрация событий по диапазону, проверка активности
подписки, контроль сроков действия токенов, определение попадания метки
времени в рабочее окно. В Day.js для этих целей используется плагин
isBetween, а также комбинации базовых методов сравнения
дат.
isBetween и его подключениеФункциональность проверки интервала реализуется через плагин
isBetween, который не входит в ядро библиотеки и
подключается отдельно.
import dayjs from 'dayjs'
import isBetween from 'dayjs/plugin/isBetween'
dayjs.extend(isBetween)
После подключения становится доступен метод:
dayjs().isBetween(start, end, unit?, inclusivity?)
Метод определяет, находится ли дата между двумя границами:
dayjs('2026-05-10').isBetween('2026-05-01', '2026-05-20')
Результат — булево значение:
true — дата входит в диапазонfalse — дата вне диапазонаТретьим параметром задаётся точность сравнения:
dayjs('2026-05-10 10:00').isBetween(
'2026-05-10 00:00',
'2026-05-10 23:59',
'day'
)
Поддерживаемые единицы:
yearmonthdayhourminutesecondmillisecondВыбор единицы влияет на то, как будут обрезаться значения времени при сравнении.
Четвёртый параметр управляет тем, включаются ли границы диапазона:
dayjs('2026-05-01').isBetween('2026-05-01', '2026-05-10', null, '[]')
Варианты:
() — исключены обе границы (по умолчанию)[] — включены обе границы[) — левая включена, правая исключена() — левая исключена, правая включенаПримеры поведения:
dayjs('2026-05-01').isBetween('2026-05-01', '2026-05-10', null, '[]') // true
dayjs('2026-05-01').isBetween('2026-05-01', '2026-05-10', null, '()') // false
При необходимости игнорировать время используется единица
day:
dayjs('2026-05-10 23:59').isBetween(
'2026-05-10 00:00',
'2026-05-10 12:00',
'day'
)
Сравнение выполняется по календарной дате, а не по точному времени.
Интервалы часто задаются динамически:
const start = dayjs().subtract(7, 'day')
const end = dayjs()
const date = dayjs('2026-05-20')
date.isBetween(start, end)
Такой подход применяется в фильтрации последних N дней, недель или месяцев.
const now = dayjs()
const isActive = now.isBetween(
event.startTime,
event.endTime,
'millisecond',
'[)'
)
Часто используется полуоткрытый интервал [) для
исключения двойного срабатывания на границе.
const isValid = dayjs(token.createdAt).isBetween(
dayjs().subtract(30, 'day'),
dayjs()
)
Метод активно используется при обработке коллекций:
const events = [
{ date: '2026-05-01' },
{ date: '2026-05-10' },
{ date: '2026-06-01' }
]
const filtered = events.filter(event =>
dayjs(event.date).isBetween('2026-05-01', '2026-05-31', 'day', '[]')
)
Результатом будет набор событий, попадающих в май.
isBetweenПри отсутствии плагина интервал можно проверить через комбинацию
isAfter и isBefore:
const date = dayjs('2026-05-10')
const isInside =
date.isAfter('2026-05-01') &&
date.isBefore('2026-05-20')
С учётом границ:
const isInsideInclusive =
(date.isAfter('2026-05-01') || date.isSame('2026-05-01')) &&
(date.isBefore('2026-05-20') || date.isSame('2026-05-20'))
При сравнении учитывается точность, заданная третьим параметром. Без него сравнение идёт вплоть до миллисекунд.
Некорректные форматы приводят к невалидным объектам:
dayjs('invalid-date').isBetween('2026-01-01', '2026-12-31')
Результат всегда будет false, так как объект считается
недействительным.
При работе с локальными и UTC-датами возможно смещение:
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
dayjs.utc('2026-05-10').isBetween(
dayjs.utc('2026-05-01'),
dayjs.utc('2026-05-20')
)
Сравнение становится предсказуемым при унифицированном формате времени.
Особое внимание требуется при совпадении даты с границей интервала:
dayjs('2026-05-10').isBetween(
'2026-05-10',
'2026-05-20',
'day',
'[)'
)
При использовании [) левая граница считается включённой,
что влияет на результат фильтрации.
При смешивании форматов возможны неожиданные результаты:
dayjs('2026-05-10 12:00').isBetween(
'2026-05-10',
'2026-05-11',
'day'
)
Обе даты приводятся к началу дня, что может расширить фактический диапазон.
Интервальные проверки часто используются вместе с:
startOf() — приведение к началу периодаendOf() — определение конца периодаdiff() — вычисление расстояния между датамиПример нормализации интервала:
const start = dayjs('2026-05-01').startOf('day')
const end = dayjs('2026-05-31').endOf('day')
const result = dayjs('2026-05-15').isBetween(start, end)
const allowed = dayjs().isBetween(
subscription.start,
subscription.end,
'millisecond',
'[]'
)
const inWorkingHours = dayjs().isBetween(
dayjs().hour(9).minute(0),
dayjs().hour(18).minute(0)
)
const validRange = endDate.isAfter(startDate) &&
startDate.isBetween(minDate, maxDate, 'day', '[]') &&
endDate.isBetween(minDate, maxDate, 'day', '[]')
() → всегда
false[] → всегда
truefalseconst result = data
.map(item => dayjs(item.date))
.filter(date =>
date.isBetween(start, end, 'day', '[]')
)
.sort((a, b) => a.diff(b))
Такой подход часто применяется в аналитических и временных выборках.