Метод isBetween

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

Синтаксис

moment().isBetween(a, b, [units], [inclusivity])

Параметры:

  • a — первая граница диапазона. Может быть объектом Moment, строкой, датой или числом.

  • b — вторая граница диапазона. Аналогично a.

  • units (необязательный) — единицы измерения для сравнения. Возможные значения:

    • 'year'
    • 'month'
    • 'week'
    • 'day'
    • 'hour'
    • 'minute'
    • 'second'
    • 'millisecond' (по умолчанию)
  • inclusivity (необязательный) — определяет включение границ:

    • '()' — обе границы не включены (по умолчанию)
    • '[)'левая включена, правая исключена
    • '(]'левая исключена, правая включена
    • '[]' — обе границы включены

Метод возвращает логическое значение true или false.


Основные примеры использования

const start = moment('2026-05-01');
const end = moment('2026-05-31');
const target = moment('2026-05-15');

target.isBetween(start, end); // true, обе границы не включены
target.isBetween(start, end, null, '[]'); // true, обе границы включены
target.isBetween(start, end, 'day', '[)'); // true, левая включена, правая исключена

Особенности работы с единицами измерения

Указание единиц измерения позволяет игнорировать менее значимые части даты. Например, сравнение по дням не учитывает часы и минуты:

const start = moment('2026-05-01T12:00');
const end = moment('2026-05-10T08:00');
const target = moment('2026-05-10T23:00');

target.isBetween(start, end, 'day'); // false, так как сравнивается только дата (10 мая включается только при '[]')
target.isBetween(start, end, 'day', '[]'); // true

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


Работа с границами диапазона

Левая и правая границы обрабатываются гибко с помощью параметра inclusivity:

Inclusivity Описание
() Оба конца исключены
[) Левая включена, правая исключена
(] Левая исключена, правая включена
[] Оба конца включены

Пример:

const start = moment('2026-05-01');
const end = moment('2026-05-10');
const target = moment('2026-05-01');

target.isBetween(start, end, null, '()'); // false, левая граница не включена
target.isBetween(start, end, null, '[)'); // true, левая граница включена

Сравнение дат без времени

При работе с датами без учета времени можно обрезать объект Moment до нужной единицы измерения с помощью метода startOf:

const start = moment('2026-05-01').startOf('day');
const end = moment('2026-05-10').endOf('day');
const target = moment('2026-05-10T15:30');

target.isBetween(start, end, 'day'); // true

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


Сравнение с динамическими датами

Метод isBetween можно использовать для проверки текущей даты в пределах какого-либо периода:

const now = moment();
const promoStart = moment().subtract(3, 'days');
const promoEnd = moment().add(3, 'days');

const isActive = now.isBetween(promoStart, promoEnd, null, '[]'); // true, акция активна сегодня

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


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

  1. Если передать в isBetween строки, Moment автоматически попытается распознать формат даты. Неправильный формат вернет false.
  2. Параметр units ограничивает точность сравнения, игнорируя меньшие единицы.
  3. Метод не мутирует исходный объект Moment, что позволяет безопасно использовать его в цепочках вызовов.

Резюме возможностей

  • Проверка нахождения даты между двумя границами.
  • Гибкое включение или исключение границ.
  • Сравнение по выбранной единице измерения.
  • Работа с текущей датой или динамическими диапазонами.
  • Поддержка разных форматов входных данных: строки, объекты Moment, Date, числа.

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