Метод isBefore

Метод isBefore используется для проверки, находится ли один объект даты раньше другого. Это один из ключевых инструментов библиотеки Moment.js для сравнения временных значений. Он позволяет работать с точностью до различных единиц измерения времени — от миллисекунд до лет.


Синтаксис

momentA.isBefore(momentB, unit);

Параметры:

  • momentB — объект Moment.js, с которым происходит сравнение.
  • unit (необязательный) — строка, задающая единицу времени для сравнения. Возможные значения: 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'.

Возвращаемое значение: Булево (true или false). Возвращает true, если momentA раньше momentB с учетом указанной единицы времени.


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

  1. Сравнение без указания единицы времени При отсутствии параметра unit сравнение выполняется по полной точности, включая миллисекунды:
const date1 = moment('2026-05-21T10:30:00');
const date2 = moment('2026-05-21T12:45:00');

console.log(date1.isBefore(date2)); // true
  1. Сравнение с указанием единицы времени Можно ограничить сравнение определенной единицей:
const date1 = moment('2026-05-21T23:59:59');
const date2 = moment('2026-05-21T00:00:01');

console.log(date1.isBefore(date2, 'day')); // false, так как это один и тот же день
console.log(date1.isBefore(date2, 'hour')); // false, час отличается только на уровне часов
console.log(date1.isBefore(date2, 'minute')); // false
  1. Сравнение с прошлыми или будущими датами
const past = moment('2020-01-01');
const future = moment('2030-01-01');

console.log(past.isBefore(future)); // true
console.log(future.isBefore(past)); // false

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

  • Если указана более крупная единица, например 'month', то сравнение происходит только на уровне месяцев и игнорирует дни, часы и минуты.
  • Метод корректно обрабатывает високосные года, разные длины месяцев и переходы на летнее/зимнее время.
  • При сравнении с объектами JavaScript Date или строками Moment.js автоматически преобразует их в объекты Moment.
const date1 = moment('2026-05-21');
const date2 = new Date('2026-06-01');

console.log(date1.isBefore(date2, 'month')); // true

Использование с другими методами Moment.js

Метод isBefore часто применяется вместе с isAfter и isSame для построения сложной логики сравнения дат:

const start = moment('2026-01-01');
const end = moment('2026-12-31');
const check = moment('2026-06-15');

if (check.isBefore(end) && check.isAfter(start)) {
    console.log('Дата находится в диапазоне');
}

Рекомендации по использованию

  • Для точного сравнения времени использовать метод без указания unit.
  • Для проверки только по дате, месяцу или году указывать соответствующую единицу.
  • Для больших приложений рекомендуется всегда использовать объекты Moment вместо строковых дат, чтобы избежать неожиданных ошибок при сравнении.

Отличия от нативного сравнения JavaScript

Сравнение дат через isBefore проще и безопаснее, чем через стандартный объект Date:

const date1 = new Date('2026-05-21T10:30:00');
const date2 = new Date('2026-05-21T12:45:00');

console.log(date1 < date2); // true, но не учитывает единицы времени

Moment.js обеспечивает:

  • Поддержку указания единиц времени.
  • Читабельный и выразительный код.
  • Защиту от ошибок с форматированием и часовыми поясами.

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