Метод isBetween

Метод isBetween используется для проверки, находится ли дата в определённом диапазоне. Он особенно полезен при работе с периодами времени: фильтрацией событий, проверкой сроков действия, ограничением интервалов, анализом расписаний и календарных данных.

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

const dayjs = require('dayjs')
const isBetween = require('dayjs/plugin/isBetween')

dayjs.extend(isBetween)

Синтаксис

dayjs(date).isBetween(startDate, endDate)

Базовый вариант возвращает true, если дата находится между двумя другими датами, и false — в противном случае.

Пример:

const result = dayjs('2025-06-15')
  .isBetween('2025-06-01', '2025-06-30')

console.log(result) // true

Принцип работы

Метод сравнивает текущий объект Day.js с начальной и конечной датой диапазона.

dayjs(target).isBetween(start, end)

Где:

  • target — проверяемая дата;
  • start — начало диапазона;
  • end — конец диапазона.

Простая проверка диапазона

const date = dayjs('2025-07-10')

console.log(
  date.isBetween('2025-07-01', '2025-07-31')
)

Результат:

true

Если дата выходит за пределы диапазона:

const date = dayjs('2025-08-05')

console.log(
  date.isBetween('2025-07-01', '2025-07-31')
)

Результат:

false

Исключение граничных значений

По умолчанию isBetween не включает начальную и конечную даты.

Это означает:

const date = dayjs('2025-07-01')

console.log(
  date.isBetween('2025-07-01', '2025-07-31')
)

Результат:

false

Дата совпадает с началом диапазона, однако метод возвращает false, потому что границы исключаются.

То же самое относится к конечной дате:

const date = dayjs('2025-07-31')

console.log(
  date.isBetween('2025-07-01', '2025-07-31')
)

Результат:

false

Включение границ диапазона

Для управления поведением используется четвёртый параметр.

Символы границ

Обозначение Поведение
() обе границы исключены
[] обе границы включены
[) включено начало
(] включён конец

Включение обеих границ

const date = dayjs('2025-07-01')

console.log(
  date.isBetween(
    '2025-07-01',
    '2025-07-31',
    null,
    '[]'
  )
)

Результат:

true

Включение только начальной даты

const date = dayjs('2025-07-01')

console.log(
  date.isBetween(
    '2025-07-01',
    '2025-07-31',
    null,
    '[)'
  )
)

Результат:

true

Включение только конечной даты

const date = dayjs('2025-07-31')

console.log(
  date.isBetween(
    '2025-07-01',
    '2025-07-31',
    null,
    '(]'
  )
)

Результат:

true

Использование единиц измерения времени

Третий параметр определяет точность сравнения.

dayjs(date).isBetween(start, end, unit)

В качестве unit можно использовать:

  • year
  • month
  • week
  • day
  • hour
  • minute
  • second

Проверка только по дням

const date = dayjs('2025-06-15 23:59')

console.log(
  date.isBetween(
    '2025-06-15 00:00',
    '2025-06-16 00:00',
    'day'
  )
)

Результат:

false

При сравнении по day учитываются только дни, а не время.


Сравнение по месяцам

const date = dayjs('2025-06-15')

console.log(
  date.isBetween(
    '2025-01-01',
    '2025-12-31',
    'month'
  )
)

Результат:

true

Сравнение по годам

const date = dayjs('2025-10-01')

console.log(
  date.isBetween(
    '2020-01-01',
    '2030-01-01',
    'year'
  )
)

Работа с временем

Метод корректно сравнивает часы, минуты и секунды.

const time = dayjs('2025-06-15 14:30')

console.log(
  time.isBetween(
    '2025-06-15 09:00',
    '2025-06-15 18:00'
  )
)

Результат:

true

Проверка рабочего времени

function isWorkingHours(date) {
  return dayjs(date).isBetween(
    dayjs(date).hour(9).minute(0),
    dayjs(date).hour(18).minute(0)
  )
}

console.log(
  isWorkingHours('2025-06-15 14:00')
)

Проверка срока действия

const now = dayjs()

const active = now.isBetween(
  '2025-01-01',
  '2025-12-31',
  null,
  '[]'
)

console.log(active)

Проверка периода бронирования

const bookingDate = dayjs('2025-08-12')

const available = bookingDate.isBetween(
  '2025-08-01',
  '2025-08-31',
  'day',
  '[]'
)

console.log(available)

Использование объектов Day.js

Метод принимает не только строки, но и полноценные объекты Day.js.

const start = dayjs('2025-06-01')
const end = dayjs('2025-06-30')
const current = dayjs('2025-06-15')

console.log(
  current.isBetween(start, end)
)

Использование JavaScript Date

const start = new Date(2025, 5, 1)
const end = new Date(2025, 5, 30)

console.log(
  dayjs().isBetween(start, end)
)

Комбинирование с add

const now = dayjs()

const future = now.add(7, 'day')

console.log(
  dayjs('2025-06-20').isBetween(now, future)
)

Комбинирование с subtract

const now = dayjs()

const pastWeek = now.subtract(7, 'day')

console.log(
  dayjs('2025-06-10').isBetween(pastWeek, now)
)

Использование вместе с startOf

const date = dayjs()

const result = date.isBetween(
  date.startOf('month'),
  date.endOf('month')
)

console.log(result)

Проверка текущей недели

const now = dayjs()

const isCurrentWeek = now.isBetween(
  now.startOf('week'),
  now.endOf('week'),
  null,
  '[]'
)

console.log(isCurrentWeek)

Проверка текущего квартала

const quarterStart = dayjs().startOf('quarter')
const quarterEnd = dayjs().endOf('quarter')

console.log(
  dayjs().isBetween(
    quarterStart,
    quarterEnd,
    null,
    '[]'
  )
)

Для работы с кварталами потребуется плагин quarterOfYear.


Использование в фильтрации массивов

const dates = [
  '2025-06-01',
  '2025-06-15',
  '2025-07-01',
  '2025-08-01'
]

const filtered = dates.filter(date =>
  dayjs(date).isBetween(
    '2025-06-01',
    '2025-07-01',
    'day',
    '[)'
  )
)

console.log(filtered)

Результат:

[
  '2025-06-01',
  '2025-06-15'
]

Проверка пересечения событий

function isEventActive(eventStart, eventEnd) {
  return dayjs().isBetween(
    eventStart,
    eventEnd,
    null,
    '[]'
  )
}

console.log(
  isEventActive(
    '2025-06-01',
    '2025-06-30'
  )
)

Проверка ночного времени

function isNight(date) {
  return dayjs(date).isBetween(
    dayjs(date).hour(22).minute(0),
    dayjs(date).add(1, 'day').hour(6).minute(0)
  )
}

Подобные интервалы требуют осторожности, поскольку диапазон пересекает границу суток.


Особенности сравнения

Порядок дат имеет значение

dayjs('2025-06-15').isBetween(
  '2025-07-01',
  '2025-06-01'
)

Результат:

false

Метод не переставляет даты автоматически. Начало диапазона должно быть меньше конца.


Работа с часовыми поясами

При использовании плагина timezone необходимо следить, чтобы все даты находились в одном часовом поясе.

dayjs(date).tz('Europe/Moscow')

Иначе сравнение может дать неожиданный результат.


Проверка даты рождения

const birthday = dayjs('1995-06-15')

const result = birthday.isBetween(
  '1990-01-01',
  '2000-01-01',
  'year',
  '[]'
)

console.log(result)

Проверка периода подписки

const subscriptionStart = dayjs('2025-01-01')
const subscriptionEnd = dayjs('2025-12-31')

const isActive = dayjs().isBetween(
  subscriptionStart,
  subscriptionEnd,
  null,
  '[]'
)

console.log(isActive)

Типичные ошибки

Отсутствие подключения плагина

dayjs().isBetween(...)

Без подключения плагина возникнет ошибка:

TypeError: dayjs(...).isBetween is not a function

Неправильные границы

dayjs('2025-06-01').isBetween(
  '2025-06-01',
  '2025-06-30'
)

Результат:

false

Причина — границы по умолчанию исключаются.


Несовпадение единиц измерения

dayjs('2025-06-15 23:59').isBetween(
  '2025-06-15 00:00',
  '2025-06-15 12:00',
  'day'
)

Результат может оказаться неожиданным, поскольку сравнение идёт только по дню месяца.


Практические сценарии использования

Ограничение доступа по времени

const access = dayjs().isBetween(
  '2025-06-01 09:00',
  '2025-06-01 18:00'
)

Проверка периода акции

const isSaleActive = dayjs().isBetween(
  '2025-11-20',
  '2025-11-30',
  'day',
  '[]'
)

Проверка дедлайна

const deadline = dayjs('2025-06-20')

const valid = dayjs().isBetween(
  dayjs().subtract(30, 'day'),
  deadline,
  null,
  '[]'
)

Сравнение isBetween и других методов

Метод Назначение
isBefore дата раньше другой
isAfter дата позже другой
isSame даты совпадают
isSameOrBefore дата совпадает или раньше
isSameOrAfter дата совпадает или позже
isBetween дата находится внутри диапазона

Производительность

Метод работает быстро, поскольку Day.js использует неизменяемые объекты и компактную внутреннюю реализацию. Даже при массовой фильтрации дат isBetween показывает хорошую производительность.

Однако при обработке больших массивов желательно:

  • избегать повторного создания одинаковых объектов Day.js;
  • заранее вычислять начало и конец диапазона;
  • минимизировать преобразования строк в даты.

Пример оптимизации:

const start = dayjs('2025-01-01')
const end = dayjs('2025-12-31')

const result = items.filter(item =>
  dayjs(item.date).isBetween(start, end)
)