Методы сравнения дат в Day.js позволяют проверять не только полное совпадение временных меток, но и сравнивать значения по определённым единицам времени: годам, месяцам, дням, часам и другим интервалам.
Поддержка единиц сравнения делает код более гибким и избавляет от необходимости вручную обрезать дату или извлекать отдельные компоненты.
По умолчанию Day.js сравнивает полную временную метку вплоть до миллисекунд.
const date1 = dayjs('2025-03-10T12:00:00')
const date2 = dayjs('2025-03-10T18:00:00')
date1.isSame(date2)
Результат:
false
Несмотря на одинаковый календарный день, время отличается.
Вторым аргументом методов сравнения можно передать единицу времени.
date1.isSame(date2, 'day')
Результат:
true
Теперь сравнение выполняется только на уровне дня.
Day.js предоставляет несколько методов:
| Метод | Назначение |
|---|---|
isSame() |
Проверка равенства |
isBefore() |
Проверка, что дата раньше |
isAfter() |
Проверка, что дата позже |
isSameOrBefore() |
Равна или раньше |
isSameOrAfter() |
Равна или позже |
Некоторые методы доступны через плагины.
isSameconst a = dayjs('2025-01-10')
const b = dayjs('2025-11-20')
a.isSame(b, 'year')
Результат:
true
Сравнивается только год.
a.isSame(b, 'month')
Результат:
false
Месяцы различаются.
const a = dayjs('2025-03-10 08:00')
const b = dayjs('2025-03-10 23:59')
a.isSame(b, 'day')
Результат:
true
Время игнорируется.
isBeforeconst start = dayjs('2025-02-15')
const finish = dayjs('2025-05-01')
start.isBefore(finish, 'month')
Результат:
true
start.isBefore(finish, 'year')
Результат:
false
Обе даты находятся в одном году.
isAfterconst current = dayjs('2025-06-10')
const old = dayjs('2025-06-01')
current.isAfter(old, 'day')
Результат:
true
current.isAfter(old, 'month')
Результат:
false
Обе даты принадлежат одному месяцу.
Day.js поддерживает следующие единицы:
| Единица | Краткая форма |
|---|---|
year |
y |
month |
M |
week |
w |
day |
d |
hour |
h |
minute |
m |
second |
s |
millisecond |
ms |
Допускается использование сокращений.
date1.isSame(date2, 'month')
date1.isSame(date2, 'M')
Оба варианта эквивалентны.
При сравнении по месяцу учитывается также год.
const a = dayjs('2024-05-10')
const b = dayjs('2025-05-10')
a.isSame(b, 'month')
Результат:
false
Несмотря на одинаковый месяц, годы различаются.
const a = dayjs('2025-03-15')
const b = dayjs('2025-04-15')
a.isSame(b, 'day')
Результат:
false
Сравниваются не только числа месяца.
const isToday = inputDate.isSame(dayjs(), 'day')
const isCurrentMonth = inputDate.isSame(dayjs(), 'month')
const expired = dayjs().isAfter(expireDate, 'day')
const future = targetDate.isAfter(dayjs(), 'year')
const a = dayjs('2025-05-10 10:30')
const b = dayjs('2025-05-10 10:59')
a.isSame(b, 'hour')
Результат:
true
a.isSame(b, 'minute')
Результат:
false
Некоторые методы требуют подключения дополнительных модулей.
isSameOrBeforeimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore'
dayjs.extend(isSameOrBefore)
Использование:
date1.isSameOrBefore(date2, 'day')
isSameOrAfterimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter'
dayjs.extend(isSameOrAfter)
Использование:
date1.isSameOrAfter(date2, 'month')
Указание единицы особенно полезно при работе с периодами.
const currentWeek = date.isSame(dayjs(), 'week')
После подключения плагина QuarterOfYear:
date1.isSame(date2, 'quarter')
const a = dayjs('2025-03-15')
const b = dayjs('2025-04-15')
a.date() === b.date()
Результат:
true
Такое сравнение некорректно, потому что игнорируются месяц и год.
Правильный вариант:
a.isSame(b, 'day')
const a = dayjs('2025-05-01 00:00')
const b = dayjs('2025-05-01 23:59')
a.isSame(b)
Результат:
false
Исправление:
a.isSame(b, 'day')
startOfИногда требуется предварительно нормализовать дату.
const a = dayjs().startOf('month')
const b = dayjs('2025-05-01')
a.isSame(b, 'day')
const nextMonth = dayjs().add(1, 'month')
nextMonth.isAfter(dayjs(), 'month')
Иногда нужно сравнить только часы.
const a = dayjs('2025-01-01 10:30')
const b = dayjs('2030-12-20 10:45')
a.hour() === b.hour()
Метод isSame(..., 'hour') здесь не подходит, потому что
он также учитывает день, месяц и год.
const sameMinute =
a.minute() === b.minute()
const a = dayjs('2025-05-12')
const b = dayjs('2025-05-16')
a.isSame(b, 'week')
Результат зависит от локали и настроек начала недели.
При использовании плагинов timezone и utc сравнение выполняется с учётом временной зоны объекта Day.js.
const moscow = dayjs.tz('2025-05-10 10:00', 'Europe/Moscow')
const london = dayjs.tz('2025-05-10 08:00', 'Europe/London')
moscow.isSame(london)
Результат может быть:
true
Если обе даты представляют один и тот же момент времени.
Сравнение через встроенные методы Day.js обычно эффективнее ручного разложения даты:
date1.isSame(date2, 'day')
вместо:
date1.year() === date2.year() &&
date1.month() === date2.month() &&
date1.date() === date2.date()
Встроенные методы делают код компактнее и уменьшают вероятность ошибок.
Предпочтительно:
date1.isSame(date2, 'month')
Нежелательно:
date1.month() === date2.month() &&
date1.year() === date2.year()
Если важен только календарный день, единицу лучше указывать явно:
eventDate.isSame(dayjs(), 'day')
Это делает намерение кода очевидным.
| Выражение | Назначение |
|---|---|
isSame(date, 'day') |
Один календарный день |
isBefore(date, 'month') |
Раньше по месяцу |
isAfter(date, 'year') |
Позже по году |
isSameOrBefore(date, 'hour') |
Не позже часа |
isSameOrAfter(date, 'minute') |
Не раньше минуты |