Библиотека Day.js предоставляет удобные методы для сравнения дат и
времени. Наиболее часто используемыми инструментами являются методы
isBefore() и isAfter(), позволяющие
определить, находится ли одна дата раньше или позже другой.
Оба метода возвращают логическое значение:
true — условие выполняется;false — условие не выполняется.isBeforeМетод isBefore() проверяет, является ли текущая дата
более ранней относительно указанной.
dayjs().isBefore(date)
const dayjs = require('dayjs')
const date1 = dayjs('2025-05-10')
const date2 = dayjs('2025-06-01')
console.log(date1.isBefore(date2))
Результат:
true
Дата 2025-05-10 действительно находится раньше
2025-06-01.
isAfterМетод isAfter() выполняет противоположную задачу —
определяет, находится ли дата позже указанной.
dayjs().isAfter(date)
const dayjs = require('dayjs')
const date1 = dayjs('2025-08-15')
const date2 = dayjs('2025-01-01')
console.log(date1.isAfter(date2))
Результат:
true
Оба метода часто используются для проверки текущей даты относительно какого-либо момента.
const deadline = dayjs('2025-12-31')
if (dayjs().isAfter(deadline)) {
console.log('Срок истёк')
}
const eventDate = dayjs('2026-01-10')
if (dayjs().isBefore(eventDate)) {
console.log('Событие ещё не началось')
}
Методы принимают практически любой формат даты, поддерживаемый Day.js.
dayjs().isBefore('2026-01-01')
const nativeDate = new Date()
dayjs('2025-01-01').isAfter(nativeDate)
const timestamp = 1767225600000
console.log(dayjs().isBefore(timestamp))
Оба метода поддерживают второй аргумент — единицу измерения времени. Это позволяет выполнять сравнение не полностью, а только в пределах конкретной единицы.
isBefore(date, unit)
isAfter(date, unit)
const d1 = dayjs('2025-01-01')
const d2 = dayjs('2026-12-31')
console.log(d1.isBefore(d2, 'year'))
Результат:
true
Сравнение происходит только по году.
const d1 = dayjs('2025-05-10')
const d2 = dayjs('2025-06-01')
console.log(d1.isBefore(d2, 'month'))
Результат:
true
const d1 = dayjs('2025-05-10 23:59')
const d2 = dayjs('2025-05-11 00:01')
console.log(d1.isBefore(d2, 'day'))
Результат:
true
Время игнорируется, учитывается только день.
Для второго аргумента доступны следующие значения:
| Единица | Значение |
|---|---|
year |
год |
month |
месяц |
week |
неделя |
day |
день |
hour |
час |
minute |
минута |
second |
секунда |
const d1 = dayjs('2025-05-10 10:00')
const d2 = dayjs('2025-05-10 12:00')
console.log(d1.isBefore(d2))
Результат:
true
Даже при одинаковой дате время отличается.
Если даты одинаковые, методы возвращают false.
const d1 = dayjs('2025-05-10')
const d2 = dayjs('2025-05-10')
console.log(d1.isBefore(d2))
console.log(d1.isAfter(d2))
Результат:
false
false
Методы проверяют строгое сравнение.
Комбинация isBefore() и isAfter() позволяет
проверять попадание даты в диапазон.
const current = dayjs()
const start = dayjs('2025-01-01')
const end = dayjs('2025-12-31')
const isInRange =
current.isAfter(start) &&
current.isBefore(end)
console.log(isInRange)
const createdAt = dayjs('2025-01-10')
if (dayjs().isAfter(createdAt.add(30, 'day'))) {
console.log('Запись старше 30 дней')
}
const expiresAt = dayjs('2025-05-01 12:00')
const expired = dayjs().isAfter(expiresAt)
console.log(expired)
Методы удобно применять в функциях сортировки.
const dates = [
dayjs('2025-03-01'),
dayjs('2025-01-15'),
dayjs('2025-02-10')
]
dates.sort((a, b) => {
if (a.isBefore(b)) return -1
if (a.isAfter(b)) return 1
return 0
})
console.log(dates)
При использовании плагина timezone сравнение выполняется
с учётом временной зоны.
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(timezone)
const moscow = dayjs.tz('2025-05-10 12:00', 'Europe/Moscow')
const london = dayjs.tz('2025-05-10 10:00', 'Europe/London')
console.log(moscow.isAfter(london))
Неправильно:
'2025-12-01' > '2025-01-01'
Хотя ISO-строки иногда сравниваются корректно, такой подход считается ненадёжным.
Правильно:
dayjs('2025-12-01').isAfter('2025-01-01')
function isFuture(date) {
return dayjs(date).isAfter(dayjs())
}
console.log(isFuture('2030-01-01'))
function isPast(date) {
return dayjs(date).isBefore(dayjs())
}
console.log(isPast('2020-01-01'))
diffИногда методы сравнения комбинируются с diff().
const start = dayjs('2025-01-01')
const end = dayjs('2025-01-10')
if (end.isAfter(start)) {
console.log(end.diff(start, 'day'))
}
Результат:
9
Методы isBefore() и isAfter() работают
быстро, поскольку внутри сравниваются timestamp-значения.
const result = dayjs(a).valueOf() < dayjs(b).valueOf()
Однако прямое использование встроенных методов Day.js делает код значительно более читаемым и безопасным.
const publicationDate = dayjs('2025-05-01')
const available =
publicationDate.isBefore(dayjs()) &&
publicationDate.isAfter(dayjs('2025-01-01'))
console.log(available)
const isExpired = dayjs().isAfter(subscriptionEnd)
return (
<div>
{isExpired ? 'Подписка истекла' : 'Подписка активна'}
</div>
)
app.post('/login', (req, res) => {
const blockedUntil = dayjs(user.blockedUntil)
if (dayjs().isBefore(blockedUntil)) {
return res.status(403).json({
error: 'Аккаунт временно заблокирован'
})
}
res.json({ success: true })
})
const d1 = new Date('2025-01-01')
const d2 = new Date('2025-02-01')
console.log(d1 < d2)
const d1 = dayjs('2025-01-01')
const d2 = dayjs('2025-02-01')
console.log(d1.isBefore(d2))
Подход Day.js более читаемый, единообразный и удобный при работе с форматами, временными зонами и дополнительными операциями над датами.