Метод isSame

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


Синтаксис

momentA.isSame(momentB, [unit]);
  • momentA — объект Moment.js, с которым производится сравнение.

  • momentB — объект Moment.js, с которым сравнивается momentA.

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

    • 'year' — год
    • 'month' — месяц
    • 'week' — неделя
    • 'day' — день
    • 'hour' — час
    • 'minute' — минута
    • 'second' — секунда
    • 'millisecond' — миллисекунда (по умолчанию)

Если unit не указан, метод сравнивает полные временные метки (timestamp), включая дату и время с миллисекундами.


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

Сравнение дат без указания единицы:

const date1 = moment('2026-05-21T12:30:00');
const date2 = moment('2026-05-21T12:30:00');

console.log(date1.isSame(date2)); // true

В данном примере оба объекта совпадают полностью, включая дату и время, поэтому метод возвращает true.

Сравнение только по дню:

const date1 = moment('2026-05-21T08:15:00');
const date2 = moment('2026-05-21T22:45:00');

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

Метод учитывает только дату без времени, поэтому несмотря на разницу во времени, результат равен true.

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

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

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

Проверка по месяцу игнорирует дни и время суток. Так как обе даты находятся в мае 2026 года, метод возвращает true.


Особенности и тонкости работы

  1. Единицы времени чувствительны к точности: Сравнение по 'minute' игнорирует секунды и миллисекунды, сравнение по 'hour' игнорирует минуты, секунды и миллисекунды.

  2. Отрицательные даты: Метод корректно работает с датами до эпохи Unix (до 1970 года), сравнивая года, месяцы и дни по заданной единице измерения.

  3. Часовые пояса: Если объекты Moment имеют разные часовые пояса, результат сравнения может зависеть от локального времени. Для сравнения UTC следует использовать метод utc():

    const date1 = moment.utc('2026-05-21T12:00:00Z');
    const date2 = moment.utc('2026-05-21T15:00:00Z');
    
    console.log(date1.isSame(date2, 'day')); // true
  4. Совместимость с библиотечными объектами: isSame может сравнивать объекты Moment с JavaScript Date или ISO-строками, так как Moment автоматически преобразует их:

    const date1 = moment('2026-05-21');
    const date2 = new Date('2026-05-21T00:00:00');
    
    console.log(date1.isSame(date2, 'day')); // true
  5. Сравнение с нулевыми объектами: Если передать null или undefined вместо momentB, метод возвращает false без выброса ошибок.


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

  • Фильтрация событий по дню:
const events = [
  moment('2026-05-21T10:00'),
  moment('2026-05-21T15:30'),
  moment('2026-05-22T09:00')
];

const todayEvents = events.filter(event => event.isSame(moment(), 'day'));
  • Проверка совпадения месяца для отчетов:
const reportMonth = moment('2026-05-01');
const transactionDate = moment('2026-05-21');

if (transactionDate.isSame(reportMonth, 'month')) {
  console.log('Транзакция попадает в отчетный месяц');
}
  • Сравнение дат для календаря:
const selectedDate = moment('2026-05-21');
const currentDate = moment();

if (selectedDate.isSame(currentDate, 'day')) {
  console.log('Сегодня выбранная дата');
}

Сводка ключевых моментов

  • Метод возвращает true, если два момента совпадают по указанной единице измерения времени.
  • По умолчанию сравнивает полные метки времени, включая миллисекунды.
  • Поддерживает все основные единицы времени от года до миллисекунды.
  • Работает с объектами Moment, Date и ISO-строками.
  • Часовые пояса могут влиять на результат при сравнении без перевода в UTC.

Метод isSame является мощным инструментом для точного и гибкого сравнения дат и времени в различных сценариях веб-разработки и обработки данных.