Метод isSameOrBefore

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


Синтаксис

momentA.isSameOrBefore(momentB [, unit])

Параметры:

  • momentB — объект Moment.js или строка/дата, с которой производится сравнение.

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

    • 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'.

Возвращаемое значение: Booleantrue, если momentA наступает раньше или совпадает с momentB по указанной единице измерения; иначе false.


Основные особенности

  1. Сравнение с точностью до единицы измерения Метод учитывает указанный параметр unit. Если единица измерения не задана, сравнение выполняется с точностью до миллисекунды.
const date1 = moment('2026-05-21');
const date2 = moment('2026-05-22');

console.log(date1.isSameOrBefore(date2)); // true
console.log(date1.isSameOrBefore(date2, 'day')); // true
console.log(date1.isSameOrBefore(date2, 'month')); // true
console.log(date2.isSameOrBefore(date1, 'day')); // false
  1. Поддержка различных форматов входных данных Аргумент momentB может быть строкой в любом формате, распознаваемом Moment.js, объектом Date или другим объектом moment.
const date1 = moment();
const date2 = new Date(2026, 4, 21); // месяцы нумеруются с 0
console.log(date1.isSameOrBefore(date2)); // true или false в зависимости от текущей даты
  1. Сравнение с точностью до времени Помимо дат, метод учитывает время, если единица измерения не указана:
const date1 = moment('2026-05-21T10:00:00');
const date2 = moment('2026-05-21T12:00:00');

console.log(date1.isSameOrBefore(date2)); // true
console.log(date1.isSameOrBefore(date2, 'hour')); // true
console.log(date1.isSameOrBefore(date2, 'minute')); // true
console.log(date1.isSameOrBefore(date2, 'second')); // true
  1. Совпадение дат Метод возвращает true, если оба момента совпадают по указанной единице измерения:
const date1 = moment('2026-05-21');
const date2 = moment('2026-05-21');

console.log(date1.isSameOrBefore(date2)); // true
console.log(date1.isSameOrBefore(date2, 'day')); // true

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

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

const a = moment('2025-12-31');
const b = moment('2026-01-01');

console.log(a.isSameOrBefore(b, 'year')); // true, 2025 <= 2026

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

const a = moment('2026-05-15');
const b = moment('2026-06-01');

console.log(a.isSameOrBefore(b, 'month')); // true
console.log(b.isSameOrBefore(a, 'month')); // false

Сравнение дней с учетом времени

const a = moment('2026-05-21T08:30:00');
const b = moment('2026-05-21T12:00:00');

console.log(a.isSameOrBefore(b, 'day')); // true, так как день одинаковый
console.log(a.isSameOrBefore(b)); // true, учитывается точное время

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

const a = moment('2026-05-21T10:00:00');
console.log(a.isSameOrBefore('2026-05-21T12:00:00')); // true
console.log(a.isSameOrBefore(['2026', '05', '21', '09', '00'])); // true

Отличия от метода isBefore

Метод isSameOrBefore является расширением метода isBefore и отличается тем, что возвращает true не только при меньшем значении, но и при равенстве:

const a = moment('2026-05-21');
const b = moment('2026-05-21');

console.log(a.isBefore(b)); // false
console.log(a.isSameOrBefore(b)); // true

Взаимодействие с другими методами Moment.js

  • isSameOrAfter — противоположная операция, проверяет, равен ли момент или наступает позже.
  • isBetween — может использоваться вместе для проверки диапазона дат.
  • diff — позволяет вычислять разницу между моментами, а isSameOrBefore проверяет их относительное расположение.

Советы по применению

  1. Всегда уточнять единицу измерения, чтобы избежать неожиданного поведения при сравнении дат с разным временем.
  2. Использовать совместно с clone(), если нужно сохранить исходный объект Moment.js перед манипуляциями.
  3. Для динамических сравнениях с текущей датой удобно использовать moment():
if (moment().isSameOrBefore(moment('2026-05-21'))) {
    console.log('Событие ещё не наступило');
}

Метод isSameOrBefore обеспечивает гибкое и точное сравнение дат и времени, делая Moment.js мощным инструментом для работы с календарными и временными данными в JavaScript.