Библиотека Day.js не включает поддержку относительного времени по
умолчанию. Для работы с выражениями вроде «5 минут назад», «через 2 дня»
или «несколько секунд назад» требуется подключение плагина
relativeTime.
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
dayjs.extend(relativeTime)
После подключения становятся доступны методы:
from()to()fromNow()toNow()Метод fromNow() вычисляет относительное время
относительно текущего момента.
const result = dayjs('2026-05-20').fromNow()
console.log(result)
Пример результата:
'3 дня назад'
Для будущих дат:
const result = dayjs().add(2, 'hour').fromNow()
console.log(result)
Результат:
'через 2 часа'
Метод toNow() работает в противоположном
направлении.
const result = dayjs('2026-05-20').toNow()
Результат:
'через 3 дня'
Метод from() сравнивает две даты.
const start = dayjs('2026-01-01')
const end = dayjs('2026-01-10')
console.log(end.from(start))
Результат:
'через 9 дней'
Обратное сравнение:
console.log(start.from(end))
Результат:
'9 дней назад'
Метод to() аналогичен from(), но
направление вычисления инвертировано.
console.log(start.to(end))
Результат:
'через 9 дней'
По умолчанию Day.js добавляет слова:
Для отключения суффиксов используется второй аргумент
true.
const result = dayjs().subtract(3, 'hour').fromNow(true)
console.log(result)
Результат:
'3 часа'
Пример с будущим временем:
const result = dayjs().add(5, 'day').fromNow(true)
console.log(result)
Результат:
'5 дней'
Для работы относительного времени на разных языках необходимо импортировать нужную локаль.
Пример для русского языка:
import 'dayjs/locale/ru'
Установка локали:
dayjs.locale('ru')
Полный пример:
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/ru'
dayjs.extend(relativeTime)
dayjs.locale('ru')
console.log(dayjs().subtract(1, 'day').fromNow())
Результат:
'день назад'
import 'dayjs/locale/en'
dayjs.locale('en')
console.log(dayjs().subtract(3, 'minute').fromNow())
Результат:
'3 minutes ago'
Будущее время:
console.log(dayjs().add(2, 'week').fromNow())
Результат:
'in 2 weeks'
Русская локаль учитывает склонение слов.
dayjs.locale('ru')
console.log(dayjs().subtract(1, 'minute').fromNow())
console.log(dayjs().subtract(2, 'minute').fromNow())
console.log(dayjs().subtract(5, 'minute').fromNow())
Результаты:
'минуту назад'
'2 минуты назад'
'5 минут назад'
Day.js автоматически выбирает правильную форму слова.
import 'dayjs/locale/de'
dayjs.locale('de')
console.log(dayjs().subtract(1, 'hour').fromNow())
Результат:
'vor einer Stunde'
Будущее время:
console.log(dayjs().add(3, 'day').fromNow())
Результат:
'in 3 Tagen'
import 'dayjs/locale/fr'
dayjs.locale('fr')
console.log(dayjs().subtract(10, 'second').fromNow())
Результат:
'il y a quelques secondes'
import 'dayjs/locale/es'
dayjs.locale('es')
console.log(dayjs().subtract(4, 'month').fromNow())
Результат:
'hace 4 meses'
Глобальная локаль изменяет поведение всей библиотеки. Иногда требуется локализовать только отдельный экземпляр даты.
import 'dayjs/locale/ru'
import 'dayjs/locale/en'
const date = dayjs().subtract(1, 'day')
console.log(date.locale('ru').fromNow())
console.log(date.locale('en').fromNow())
Результат:
'день назад'
'a day ago'
Day.js позволяет динамически менять язык интерфейса.
function setLanguage(lang) {
dayjs.locale(lang)
}
setLanguage('en')
console.log(dayjs().subtract(2, 'hour').fromNow())
setLanguage('ru')
console.log(dayjs().subtract(2, 'hour').fromNow())
Результат:
'2 hours ago'
'2 часа назад'
При большом количестве языков выгодно загружать локали динамически.
async function loadLocale(locale) {
await import(`dayjs/locale/${locale}.js`)
dayjs.locale(locale)
}
await loadLocale('fr')
console.log(dayjs().subtract(1, 'week').fromNow())
Day.js позволяет переопределять стандартные фразы локали.
Для этого используется плагин updateLocale.
import updateLocale from 'dayjs/plugin/updateLocale'
dayjs.extend(updateLocale)
Изменение формулировок:
dayjs.updateLocale('en', {
relativeTime: {
future: 'after %s',
past: '%s before',
s: 'few seconds',
m: 'a minute',
mm: '%d minutes',
h: 'an hour',
hh: '%d hours',
d: 'a day',
dd: '%d days',
M: 'a month',
MM: '%d months',
y: 'a year',
yy: '%d years'
}
})
Проверка:
console.log(dayjs().subtract(2, 'day').fromNow())
Результат:
'2 days before'
Плагин RelativeTime автоматически выбирает единицу измерения.
Например:
dayjs().subtract(30, 'second').fromNow()
Результат:
'несколько секунд назад'
При увеличении интервала единица меняется:
dayjs().subtract(59, 'minute').fromNow()
Результат:
'час назад'
Day.js использует внутренние пороги переключения единиц времени.
Например:
Пример:
console.log(dayjs().subtract(44, 'second').fromNow())
console.log(dayjs().subtract(45, 'second').fromNow())
Результаты могут отличаться:
'несколько секунд назад'
'минуту назад'
Относительное время особенно полезно:
Пример:
const messages = [
{
text: 'Новое сообщение',
createdAt: dayjs().subtract(5, 'minute')
},
{
text: 'Обновление профиля',
createdAt: dayjs().subtract(2, 'hour')
}
]
messages.forEach(message => {
console.log(
`${message.text}: ${message.createdAt.fromNow()}`
)
})
Результат:
Новое сообщение: 5 минут назад
Обновление профиля: 2 часа назад
Для корректной работы в международных приложениях относительное время часто комбинируют с UTC.
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
Пример:
const created = dayjs.utc('2026-05-20T10:00:00Z')
console.log(created.local().fromNow())
При работе с часовыми поясами используется плагин
timezone.
import timezone from 'dayjs/plugin/timezone'
dayjs.extend(timezone)
Пример:
const tokyo = dayjs.tz(
'2026-05-20 12:00',
'Asia/Tokyo'
)
console.log(tokyo.fromNow())
Пример компонента:
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/ru'
dayjs.extend(relativeTime)
dayjs.locale('ru')
function PostDate({ createdAt }) {
return (
<span>
{dayjs(createdAt).fromNow()}
</span>
)
}
Относительное время быстро устаревает. В интерфейсах обычно используется периодическое обновление.
Пример:
setInterval(() => {
const value = dayjs().subtract(1, 'minute').fromNow()
console.log(value)
}, 1000)
Ошибка:
dayjs(...).fromNow is not a function
Причина:
dayjs.extend(relativeTime)
не был вызван.
dayjs.locale('ru')
не сработает без:
import 'dayjs/locale/ru'
dayjs.locale('de')
изменяет язык для всех последующих объектов Day.js.
Для изолированного использования:
date.locale('de').fromNow()
Day.js во многом повторяет API библиотеки Moment.js.
Пример Moment.js:
moment().subtract(1, 'day').fromNow()
Аналог в Day.js:
dayjs().subtract(1, 'day').fromNow()
Главные преимущества Day.js: