Библиотека Day.js поддерживает локализацию дат, времени, названий месяцев, дней недели, форматов отображения и относительного времени. Локаль определяет, каким образом дата будет представлена пользователю в зависимости от языка и региональных настроек.
По умолчанию используется английская локаль (en).
import dayjs from 'dayjs'
console.log(dayjs().format())
// 2026-05-23T10:15:30+00:00
Для подключения других языков необходимо импортировать соответствующую локаль.
Каждая локаль поставляется отдельным модулем.
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
После импорта локаль становится доступной внутри библиотеки, но автоматически не активируется.
Глобальная локаль применяется ко всем новым объектам
dayjs.
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
console.log(dayjs().format('D MMMM YYYY'))
// 23 мая 2026
Метод:
dayjs.locale(localeName)
принимает строковый идентификатор локали.
После вызова:
dayjs.locale('ru')
все новые экземпляры будут использовать русский язык:
console.log(dayjs().format('dddd'))
// суббота
console.log(dayjs().format('MMMM'))
// май
Это поведение распространяется на:
Особенность Day.js заключается в неизменяемости объектов.
const date = dayjs()
dayjs.locale('ru')
console.log(date.format('MMMM'))
Результат останется английским, если объект был создан до смены локали.
Необходимо создать новый экземпляр:
const date = dayjs()
dayjs.locale('ru')
const newDate = dayjs()
console.log(newDate.format('MMMM'))
// май
Текущую глобальную локаль можно получить без аргументов:
console.log(dayjs.locale())
// ru
Локаль может изменяться динамически.
import 'dayjs/locale/ru'
import 'dayjs/locale/de'
import 'dayjs/locale/fr'
dayjs.locale('ru')
console.log(dayjs().format('MMMM'))
// май
dayjs.locale('de')
console.log(dayjs().format('MMMM'))
// Mai
dayjs.locale('fr')
console.log(dayjs().format('MMMM'))
// mai
Глобальная локаль подходит не всегда. В многозадачных приложениях часто требуется отображать даты одновременно на нескольких языках.
Для этого используется локальная установка локали через метод
.locale() у экземпляра.
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
import 'dayjs/locale/fr'
const date = dayjs()
console.log(date.locale('ru').format('MMMM'))
// май
console.log(date.locale('fr').format('MMMM'))
// mai
Изменяет поведение всей библиотеки:
dayjs.locale('ru')
Подходит для:
Применяется только к конкретному экземпляру:
dayjs().locale('fr')
Подходит для:
dayjs.locale('en')
const ruDate = dayjs().locale('ru')
console.log(ruDate.format('MMMM'))
// май
console.log(dayjs().format('MMMM'))
// May
Локальный вызов .locale() создаёт новый объект с другой
локалью.
Локаль удобно комбинируется с форматированием.
const result = dayjs()
.locale('ru')
.format('D MMMM YYYY')
console.log(result)
// 23 мая 2026
Для отображения относительного времени требуется плагин
RelativeTime.
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/ru'
dayjs.extend(relativeTime)
dayjs.locale('ru')
console.log(dayjs().fromNow())
// несколько секунд назад
import 'dayjs/locale/de'
const date = dayjs().locale('de')
console.log(date.fromNow())
// vor ein paar Sekunden
Одна из сильных сторон Day.js — возможность одновременной работы с разными языками.
import 'dayjs/locale/ru'
import 'dayjs/locale/fr'
import 'dayjs/locale/es'
const now = dayjs()
console.log(now.locale('ru').format('dddd'))
// суббота
console.log(now.locale('fr').format('dddd'))
// samedi
console.log(now.locale('es').format('dddd'))
// sábado
Некоторые форматы автоматически адаптируются под локаль.
Для этого используется плагин LocalizedFormat.
import localizedFormat from 'dayjs/plugin/localizedFormat'
dayjs.extend(localizedFormat)
После подключения:
dayjs.locale('ru')
console.log(dayjs().format('LL'))
// 23 мая 2026 г.
const date = dayjs('2026-12-25')
console.log(date.locale('en').format('LL'))
// December 25, 2026
console.log(date.locale('ru').format('LL'))
// 25 декабря 2026 г.
console.log(date.locale('de').format('LL'))
// 25. Dezember 2026
| Локаль | Язык |
|---|---|
ru |
Русский |
en |
Английский |
de |
Немецкий |
fr |
Французский |
es |
Испанский |
it |
Итальянский |
ja |
Японский |
zh-cn |
Китайский |
kk |
Казахский |
uk |
Украинский |
import 'dayjs/locale/kk'
dayjs.locale('kk')
console.log(dayjs().format('D MMMM YYYY'))
Результат:
23 мамыр 2026
В среде Node.js подключение выглядит аналогично.
const dayjs = require('dayjs')
require('dayjs/locale/ru')
dayjs.locale('ru')
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
В крупных приложениях локали часто загружаются по требованию.
async function setLocale(locale) {
await import(`dayjs/locale/${locale}.js`)
dayjs.locale(locale)
}
await setLocale('ru')
Такой подход уменьшает размер основного bundle.
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
function Component() {
return (
<div>
{dayjs().format('D MMMM YYYY')}
</div>
)
}
function DateCard({ locale }) {
return (
<div>
{dayjs().locale(locale).format('LL')}
</div>
)
}
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
computed: {
formattedDate() {
return dayjs().format('D MMMM YYYY')
}
}
function changeLanguage(lang) {
dayjs.locale(lang)
}
После смены локали новые даты будут форматироваться иначе.
Если локаль не была импортирована:
dayjs.locale('ru')
Day.js silently fallback выполнит переключение обратно на английский язык.
Поэтому локаль необходимо импортировать заранее.
import dayjs from 'dayjs'
dayjs.locale('ru')
console.log(dayjs().format('MMMM'))
// May
Причина — отсутствие:
import 'dayjs/locale/ru'
Плагин LocaleData предоставляет доступ к данным
языка.
import localeData from 'dayjs/plugin/localeData'
dayjs.extend(localeData)
console.log(dayjs.months())
Результат:
[
'January',
'February',
'March',
...
]
После смены локали:
dayjs.locale('ru')
console.log(dayjs.months())
[
'январь',
'февраль',
'март',
...
]
console.log(dayjs.weekdays())
[
'Sunday',
'Monday',
...
]
Русская локаль:
dayjs.locale('ru')
console.log(dayjs.weekdays())
[
'воскресенье',
'понедельник',
...
]
console.log(dayjs.monthsShort())
console.log(dayjs.weekdaysShort())
Пример:
[
'янв.',
'февр.',
'март',
...
]
Для изменения существующей локали используется плагин
UpdateLocale.
import updateLocale from 'dayjs/plugin/updateLocale'
dayjs.extend(updateLocale)
dayjs.updateLocale('ru', {
months: [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь'
]
})
dayjs.updateLocale('ru', {
relativeTime: {
future: 'через %s',
past: '%s назад',
s: 'несколько секунд',
m: 'минута',
mm: '%d минут'
}
})
dayjs.locale({
name: 'custom',
weekdays: [
'Воскресенье',
'Понедельник',
'Вторник',
'Среда',
'Четверг',
'Пятница',
'Суббота'
],
months: [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь'
]
})
Использование:
dayjs.locale('custom')
Причина:
import 'dayjs/locale/ru'
не был выполнен.
Объект был создан до смены глобальной локали.
Не подключён:
import 'dayjs/locale/ru'
или локаль была установлена до подключения плагина.
import dayjs from 'dayjs'
import localizedFormat from 'dayjs/plugin/localizedFormat'
import 'dayjs/locale/ru'
import 'dayjs/locale/en'
import 'dayjs/locale/de'
dayjs.extend(localizedFormat)
function formatDate(date, locale) {
return dayjs(date)
.locale(locale)
.format('LL')
}
console.log(formatDate('2026-05-23', 'ru'))
// 23 мая 2026 г.
console.log(formatDate('2026-05-23', 'en'))
// May 23, 2026
console.log(formatDate('2026-05-23', 'de'))
// 23. Mai 2026