Проверка момента на момент

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


Сравнение моментов

Для сравнения двух объектов Moment.js используются методы isBefore, isAfter и isSame. Они позволяют определить относительное положение одного момента по отношению к другому.

const moment = require('moment');

const date1 = moment('2026-05-21');
const date2 = moment('2026-06-01');

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2));  // false
console.log(date1.isSame(date2));   // false

Ключевые моменты:

  • Методы принимают необязательный второй аргумент, определяющий единицу измерения (year, month, day, hour, minute, second).
  • Пример сравнения по дням, игнорируя время:
console.log(date1.isSame(date2, 'day')); // false

Проверка принадлежности диапазону

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

const start = moment('2026-05-01');
const end = moment('2026-05-31');
const check = moment('2026-05-21');

console.log(check.isBetween(start, end));            // true
console.log(check.isBetween(start, end, null, '[]')); // true, включает границы

Особенности:

  • Четыре варианта включения границ: (), [), (], [].
  • Если границы не включены, метод проверяет строго между start и end.

Проверка на начало или конец единицы времени

Методы isSameOrBefore и isSameOrAfter расширяют возможности сравнения, учитывая равенство с границей.

const now = moment('2026-05-21');
const future = moment('2026-05-21');

console.log(now.isSameOrBefore(future, 'day')); // true
console.log(now.isSameOrAfter(future, 'day'));  // true

Методы startOf и endOf позволяют проверять, находится ли момент в начале или конце выбранного периода:

const m = moment('2026-05-21T00:00:00');
console.log(m.isSame(m.clone().startOf('day'))); // true

Проверка валидности момента

Прежде чем сравнивать даты, важно убедиться, что они валидны. Метод isValid позволяет проверить корректность объекта Moment.js.

const validDate = moment('2026-05-21');
const invalidDate = moment('2026-13-01');

console.log(validDate.isValid());   // true
console.log(invalidDate.isValid()); // false

Невалидные объекты могут приводить к неожиданным результатам при сравнении, поэтому проверка isValid является обязательной при работе с пользовательским вводом.


Проверка конкретных компонентов даты

Метод get или соответствующие сокращения (year(), month(), date(), hour(), minute(), second()) позволяют проверять отдельные части даты.

const m = moment('2026-05-21T15:30:00');

console.log(m.year() === 2026);   // true
console.log(m.month() === 4);     // true, месяцы в Moment.js считаются с 0
console.log(m.date() === 21);     // true

Такое сравнение полезно, когда необходимо определить совпадение конкретного дня недели, месяца или года.


Сравнение с текущим временем

Moment.js предоставляет возможность легко сравнивать момент с текущим временем:

const now = moment();
const event = moment('2026-05-21');

console.log(event.isAfter(now));  // true, если событие в будущем
console.log(event.isBefore(now)); // false

Это упрощает проверку сроков, дедлайнов и других временных условий.


Практические сценарии проверки

  1. Проверка прошедших и будущих событий:
const deadline = moment('2026-05-31');
if (moment().isAfter(deadline)) {
    console.log('Срок истек');
}
  1. Фильтрация событий в диапазоне дат:
const events = [
    moment('2026-05-20'),
    moment('2026-06-05'),
    moment('2026-05-25')
];

const start = moment('2026-05-21');
const end = moment('2026-05-30');

const filtered = events.filter(e => e.isBetween(start, end, null, '[]'));
console.log(filtered.map(d => d.format('YYYY-MM-DD'))); // ['2026-05-25']
  1. Проверка совпадения дня недели или месяца:
const meeting = moment('2026-05-21');
if (meeting.day() === 4) { // 4 — четверг
    console.log('Встреча в четверг');
}

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

  • Всегда использовать isValid перед сравнением или обработкой даты.
  • При сравнении дат учитывать единицу измерения, чтобы не возникало неожиданных результатов.
  • Для диапазонов использовать isBetween с явным указанием включения или исключения границ.
  • Проверять компоненты даты через методы year(), month(), date() для точных условий.

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