Функции isBefore и isAfter используются для
определения хронологического порядка двух значений даты. Обе функции
работают с объектами Date или значениями, которые могут
быть приведены к дате, и возвращают булево значение, отражающее
результат сравнения.
Основная логика построена на сравнении временных меток в
миллисекундах, получаемых через внутреннее представление
Date.getTime().
Функция isBefore определяет, является ли первая дата
строго раньше второй.
isBefore(date, dateToCompare)
date — дата, которая проверяетсяdateToCompare — дата, с которой выполняется
сравнениеtrue — если date меньше
dateToComparefalse — если date больше или равна
dateToCompareСравнение основано на числовом значении времени:
const timeA = new Date(date).getTime()
const timeB = new Date(dateToCompare).getTime()
timeA < timeB
Если результат истинный, первая дата считается более ранней.
import { isBefore } from 'date-fns'
const result = isBefore(
new Date(2024, 0, 1),
new Date(2024, 0, 10)
)
console.log(result) // true
import { isBefore } from 'date-fns'
const start = new Date('2024-06-01T10:00:00')
const end = new Date('2024-06-01T12:00:00')
isBefore(start, end) // true
falsefalseФункция isAfter определяет, является ли первая дата
строго позже второй.
isAfter(date, dateToCompare)
date — дата для проверкиdateToCompare — дата сравненияtrue — если date больше
dateToComparefalse — если date меньше или равна
dateToCompareЛогика эквивалентна обратному сравнению:
const timeA = new Date(date).getTime()
const timeB = new Date(dateToCompare).getTime()
timeA > timeB
import { isAfter } from 'date-fns'
const now = new Date(2024, 5, 1)
const past = new Date(2024, 0, 1)
isAfter(now, past) // true
import { isAfter } from 'date-fns'
const finish = new Date('2024-06-01T18:00:00')
const deadline = new Date('2024-06-01T17:00:00')
isAfter(finish, deadline) // true
falsefalseОбе функции являются симметричными по логике и используются для противоположных проверок.
| Ситуация | isBefore | isAfter |
|---|---|---|
| date < compare | true | false |
| date > compare | false | true |
| date = compare | false | false |
Ни одна из функций не возвращает true при совпадении
значений времени.
import { isBefore, isAfter } from 'date-fns'
const a = new Date(2024, 0, 1)
const b = new Date(2024, 0, 1)
isBefore(a, b) // false
isAfter(a, b) // false
Для проверки равенства используется отдельная логика через сравнение
времени или функцию isEqual.
Даже минимальные различия во времени влияют на результат сравнения.
import { isBefore } from 'date-fns'
const a = new Date('2024-01-01T10:00:00.000')
const b = new Date('2024-01-01T10:00:00.001')
isBefore(a, b) // true
При передаче значений, которые не могут быть интерпретированы как
валидная дата, результат сравнения обычно становится
false.
import { isAfter } from 'date-fns'
isAfter('invalid-date', new Date()) // false
Такое поведение связано с тем, что внутренняя конвертация приводит к
NaN, а любые сравнения с NaN дают
отрицательный результат.
Функции часто применяются для сортировки и отбора данных.
import { isAfter } from 'date-fns'
const dates = [
new Date(2024, 0, 1),
new Date(2025, 0, 1),
new Date(2023, 0, 1)
]
const now = new Date(2024, 6, 1)
const futureDates = dates.filter(date => isAfter(date, now))
import { isBefore, isAfter } from 'date-fns'
const date = new Date('2024-06-15')
const start = new Date('2024-06-01')
const end = new Date('2024-06-30')
const inRange =
isAfter(date, start) &&
isBefore(date, end)
Нативное сравнение дат в JavaScript возможно через приведение к числу:
dateA < dateB
dateA > dateB
Однако date-fns предоставляет более явные функции,
повышающие читаемость кода и уменьшающие неоднозначность при работе с
датами в сложных выражениях.
Сравнение выполняется на основе UTC-времени, хранящегося внутри
объекта Date. Это означает, что локальная временная зона
влияет только на создание даты, но не на сам процесс сравнения.
import { isBefore } from 'date-fns'
const a = new Date('2024-01-01T00:00:00+03:00')
const b = new Date('2024-01-01T00:00:00Z')
isBefore(a, b)
Результат зависит от фактического UTC-времени, а не от визуального представления строки.
isBefore и isAfter часто используются
совместно с функциями:
addDayssubDaysparseISOstartOfDayendOfDayisEqualПример комбинированной логики:
import { isAfter, isBefore, addDays } from 'date-fns'
const today = new Date()
const tomorrow = addDays(today, 1)
const check = isAfter(tomorrow, today) && isBefore(today, tomorrow)