Модель конфигурации в Day.js строится на сочетании глобальных настроек, локальных параметров экземпляра и подключаемых плагинов. Библиотека изначально проектируется как неизменяемая (immutable), поэтому любое «переопределение» не изменяет исходные объекты, а формирует новые состояния через цепочку преобразований.
Ключевые уровни управления поведением:
Такое разделение позволяет контролировать форматирование, парсинг и интерпретацию дат без изменения ядра библиотеки.
Локаль определяет правила отображения дат: названия месяцев, дней недели, форматы относительного времени.
Подключение и установка глобальной локали:
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
После установки все новые экземпляры начинают использовать указанную локаль по умолчанию.
Переопределение глобальной локали возможно в любой момент выполнения программы:
dayjs.locale('en')
dayjs.locale('de')
Каждое последующее изменение влияет на все новые вычисления, если не задан локальный контекст на уровне экземпляра.
Механизм updateLocale позволяет изменять отдельные части
существующей локали без полной замены.
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
dayjs.updateLocale('ru', {
months: [
'Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн',
'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'
]
})
Изменение затрагивает только указанные поля, остальные настройки локали сохраняются.
Особенно часто изменяется блок relativeTime, отвечающий
за выражения вида «через 5 минут» или «2 дня назад».
dayjs.updateLocale('ru', {
relativeTime: {
future: 'через %s',
past: '%s назад',
s: 'несколько секунд',
m: 'минута',
mm: '%d минут',
h: 'час',
hh: '%d часов',
d: 'день',
dd: '%d дней',
M: 'месяц',
MM: '%d месяцев',
y: 'год',
yy: '%d лет'
}
})
Такая переопределяемая структура позволяет адаптировать текст под доменные требования приложения.
Глобальные параметры не являются обязательными для каждого объекта. Каждый экземпляр может хранить собственную локаль, не затрагивая остальные.
const d1 = dayjs().locale('en')
const d2 = dayjs().locale('ru')
Приоритет локали:
dayjs.locale();Подобная иерархия позволяет создавать изолированные контексты форматирования, например для мультиязычных интерфейсов.
Day.js использует архитектуру расширений через extend,
которая фактически изменяет поведение ядра.
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
После подключения плагина появляются новые методы и изменяется логика обработки даты.
Каждый плагин:
Пример цепочки расширений:
import timezone from 'dayjs/plugin/timezone'
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
dayjs.extend(timezone)
Порядок подключения влияет на итоговое поведение, так как некоторые плагины зависят от других.
Базовый Day.js ограничен строгим ISO-парсингом, однако плагин
customParseFormat меняет это поведение.
import customParseFormat from 'dayjs/plugin/customParseFormat'
dayjs.extend(customParseFormat)
После подключения становится доступным переопределение правил разбора строк:
dayjs('12-05-2026', 'DD-MM-YYYY')
Такое поведение фактически заменяет стандартный парсер на пользовательский.
Через плагин advancedFormat расширяется набор токенов
форматирования:
import advancedFormat from 'dayjs/plugin/advancedFormat'
dayjs.extend(advancedFormat)
Появляются дополнительные спецификаторы, что изменяет стандартный набор форматов без изменения базовой логики библиотеки.
Работа с временными зонами является частным случаем переопределения контекста времени.
import utc from 'dayjs/plugin/utc'
import timezone from 'dayjs/plugin/timezone'
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs().utc()
После вызова дата интерпретируется в универсальном часовом поясе, что фактически переопределяет локальный контекст времени.
dayjs().tz('Europe/Moscow')
Зона задаёт новый слой интерпретации, изменяя отображение без изменения внутреннего timestamp.
Плагин calendar позволяет изменять текстовые шаблоны
отображения дат относительно текущего момента.
dayjs.updateLocale('ru', {
calendar: {
sameDay: '[Сегодня в] HH:mm',
nextDay: '[Завтра в] HH:mm',
nextWeek: 'dddd [в] HH:mm',
lastDay: '[Вчера в] HH:mm',
lastWeek: '[Прошлое] dddd [в] HH:mm',
sameElse: 'DD.MM.YYYY'
}
})
Эта конфигурация переопределяет стандартные правила вывода контекста времени, формируя полностью кастомизированное поведение.
При одновременном использовании нескольких уровней переопределения действует строгая иерархия:
updateLocale изменяет базовую локаль, но не заменяет
экземплярные вызовы;Пример конфликтной ситуации:
dayjs.locale('en')
const d = dayjs().locale('ru').utc()
Здесь одновременно присутствуют три слоя:
Итоговое поведение формируется на основе комбинации этих уровней, где методы временной зоны и форматирования могут перекрывать языковые настройки.
Помимо встроенных механизмов, поведение Day.js часто изменяется через функциональные обёртки, не затрагивающие исходную библиотеку.
const formatDate = (date) =>
dayjs(date).utc().locale('ru').format('DD.MM.YYYY HH:mm')
Такая композиция формирует предопределённый пайп обработки, где каждый вызов фиксирует конкретные правила интерпретации.
В крупных приложениях конфигурация часто разделяется на модули:
Каждый модуль может переопределять поведение Day.js независимо, формируя независимые контексты работы с датами без глобального вмешательства.