Методы isBefore и isAfter

Библиотека 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('Событие ещё не началось')
}

Передача строк, объектов Date и timestamp

Методы принимают практически любой формат даты, поддерживаемый Day.js.

Строка

dayjs().isBefore('2026-01-01')

Объект Date

const nativeDate = new Date()

dayjs('2025-01-01').isAfter(nativeDate)

Timestamp

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))

Типичная ошибка при сравнении

Сравнение строк вместо объектов Day.js

Неправильно:

'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)

Использование в React

const isExpired = dayjs().isAfter(subscriptionEnd)

return (
    <div>
        {isExpired ? 'Подписка истекла' : 'Подписка активна'}
    </div>
)

Использование в Node.js API

app.post('/login', (req, res) => {
    const blockedUntil = dayjs(user.blockedUntil)

    if (dayjs().isBefore(blockedUntil)) {
        return res.status(403).json({
            error: 'Аккаунт временно заблокирован'
        })
    }

    res.json({ success: true })
})

Сравнение с нативным JavaScript

Нативный подход

const d1 = new Date('2025-01-01')
const d2 = new Date('2025-02-01')

console.log(d1 < d2)

Подход Day.js

const d1 = dayjs('2025-01-01')
const d2 = dayjs('2025-02-01')

console.log(d1.isBefore(d2))

Подход Day.js более читаемый, единообразный и удобный при работе с форматами, временными зонами и дополнительными операциями над датами.