Форматы времени по локали

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

Локаль в Day.js определяет:

  • названия месяцев и дней недели;
  • форматы отображения даты и времени;
  • правила склонения и грамматики (через плагины);
  • шаблоны «краткого» и «полного» времени.

По умолчанию используется локаль en. Для смены локали необходимо подключить соответствующий модуль и явно активировать её:

import dayjs from 'dayjs'
import 'dayjs/locale/ru'

dayjs.locale('ru')

После установки локали все операции форматирования начинают учитывать выбранный язык.

Базовые форматы времени и их локализация

Day.js использует предустановленные форматы, которые автоматически адаптируются под локаль:

  • LT — локализованное время (часы и минуты)
  • LTS — локализованное время с секундами
  • L — краткая дата
  • LL — расширенная дата (месяц прописью)
  • LLL — дата и время в расширенном виде
  • LLLL — полное текстовое представление даты и времени

Пример использования:

import dayjs from 'dayjs'
import 'dayjs/locale/ru'

dayjs.locale('ru')

const now = dayjs()

console.log(now.format('LT'))   // 14:35
console.log(now.format('LTS'))  // 14:35:42
console.log(now.format('LL'))   // 23 мая 2026 г.
console.log(now.format('LLLL')) // суббота, 23 мая 2026 г. 14:35

Каждый из этих форматов зависит от локали и меняется при её переключении.

Структура локализованных шаблонов

Внутри каждой локали Day.js хранит объект конфигурации:

  • months — полные названия месяцев
  • monthsShort — сокращённые названия
  • weekdays — полные названия дней недели
  • weekdaysShort — сокращённые дни
  • weekdaysMin — минимальные обозначения
  • formats — шаблоны форматов

Пример структуры (упрощённо):

{
  months: [
    'январь', 'февраль', 'март', ...
  ],
  weekdays: [
    'воскресенье', 'понедельник', ...
  ],
  formats: {
    LT: 'HH:mm',
    LTS: 'HH:mm:ss',
    L: 'DD.MM.YYYY',
    LL: 'D MMMM YYYY'
  }
}

Эти значения используются при вызове format().

Переключение локали на лету

Day.js позволяет менять локаль динамически без пересоздания объектов:

import dayjs from 'dayjs'
import 'dayjs/locale/ru'
import 'dayjs/locale/en'

const date = dayjs()

dayjs.locale('en')
console.log(date.format('LL'))

dayjs.locale('ru')
console.log(date.format('LL'))

Один и тот же объект даты изменяет отображение в зависимости от текущей локали.

Форматы времени и кастомизация вывода

Помимо встроенных шаблонов, можно использовать произвольные форматы:

  • YYYY — год
  • MM — месяц (число)
  • DD — день
  • HH — часы (24-часовой формат)
  • mm — минуты
  • ss — секунды
dayjs().format('YYYY-MM-DD HH:mm:ss')

Локаль влияет только на текстовые элементы, например:

  • названия месяцев;
  • дни недели;
  • формат порядка элементов в LL, LLL, LLLL.

Локализованные месяцы и дни недели

При использовании полного текстового формата Day.js подставляет строки из локали:

dayjs('2026-05-23').format('dddd, D MMMM YYYY')

Результат зависит от локали:

  • en: Saturday, May 23 2026
  • ru: суббота, 23 мая 2026

Таким образом, шаблон остаётся неизменным, изменяется только словарь.

Форматы LT и LTS в контексте локали

Форматы LT и LTS являются ключевыми для отображения времени суток:

dayjs().format('LT')
dayjs().format('LTS')

Их значение определяется локалью:

  • в одной локали используется 24-часовой формат;
  • в другой может использоваться 12-часовой с AM/PM;
  • порядок может отличаться.

Это задаётся в конфигурации локали:

formats: {
  LT: 'h:mm A',
  LTS: 'h:mm:ss A'
}

Работа с несколькими локалями в одном проекте

Day.js позволяет подключать сразу несколько локалей и переключаться между ними:

import dayjs from 'dayjs'
import 'dayjs/locale/ru'
import 'dayjs/locale/fr'

const date = dayjs()

dayjs.locale('ru')
console.log(date.format('LLLL'))

dayjs.locale('fr')
console.log(date.format('LLLL'))

Каждая локаль влияет на:

  • порядок слов;
  • грамматику;
  • формат времени;
  • сокращения.

Пользовательские локали

Возможна регистрация собственной локали:

dayjs.locale({
  name: 'custom',
  weekdays: ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
  months: ['M1', 'M2', 'M3', 'M4', 'M5', 'M6',
           'M7', 'M8', 'M9', 'M10', 'M11', 'M12'],
  formats: {
    LT: 'HH:mm',
    LTS: 'HH:mm:ss',
    L: 'DD/MM/YYYY',
    LL: 'D MMM YYYY',
    LLL: 'D MMMM YYYY HH:mm',
    LLLL: 'dddd, D MMMM YYYY HH:mm'
  }
})

После этого она используется как стандартная:

dayjs.locale('custom')

Влияние локали на цепочки преобразований

При работе с цепочками методов локаль не влияет на вычисления, только на финальное отображение:

const result = dayjs()
  .add(2, 'day')
  .subtract(3, 'hour')
  .format('LLLL')

Все операции происходят в нейтральном времени, локаль применяется только в format().

Стабильность форматов при смене локали

Day.js гарантирует, что:

  • вычисления даты не зависят от локали;
  • локаль влияет только на строковое представление;
  • один и тот же timestamp всегда одинаков, независимо от языка.

Это обеспечивает предсказуемость при работе с международными интерфейсами.

Использование локали в прикладных интерфейсах

Форматы времени по локали особенно важны в следующих сценариях:

  • мультиязычные интерфейсы;
  • панели управления;
  • отчёты и аналитика;
  • календарные приложения;
  • уведомления и логирование.

Стандартизированные форматы LL, LLL, LLLL позволяют унифицировать отображение времени без ручного форматирования для каждого языка.