Система форматирования Day.js основана на наборе токенов, которые
интерпретируются при вызове метода format(). Базовый набор
охватывает стандартные компоненты даты и времени, однако экосистема
плагинов расширяет его, добавляя более сложные и специализированные
форматы. Эти токены становятся доступны после подключения
соответствующих модулей и позволяют строить строки представления дат,
приближенные к требованиям бизнес-логики, локализации и календарных
систем.
Для работы с кварталами используется плагин
quarterOfYear, который добавляет токены, отражающие
принадлежность даты к кварталу.
Q — номер квартала без форматирования (1–4)Qo — порядковый номер квартала (1st, 2nd и т. д., при
наличии локализации)Пример использования:
import dayjs from 'dayjs'
import quarterOfYear from 'dayjs/plugin/quarterOfYear'
dayjs.extend(quarterOfYear)
dayjs().format('Q') // "2"
dayjs().format('Qo') // "2nd"
Квартальная логика особенно полезна в финансовых отчётах и аналитике, где календарь делится не на месяцы, а на отчётные периоды.
Работа с неделями требует подключения weekOfYear и, при
необходимости, isoWeek.
Появляются следующие токены:
w — номер недели в году (1–53)ww — номер недели с ведущим нулёмwo — порядковая запись недели (1st, 2nd и т. д.)W — ISO-неделяWW — ISO-неделя с ведущим нулёмПример:
import weekOfYear from 'dayjs/plugin/weekOfYear'
import isoWeek from 'dayjs/plugin/isoWeek'
dayjs.extend(weekOfYear)
dayjs.extend(isoWeek)
dayjs().format('w') // "34"
dayjs().format('WW') // "34"
ISO-нумерация недель отличается от локальной: первая неделя года определяется как неделя, содержащая первый четверг января, что критично для международных систем отчётности.
Помимо стандартного YYYY, используются токены,
учитывающие недельную структуру года:
gg — год недели (двузначный)gggg — полный год неделиGG — ISO-год недели (двузначный)GGGG — полный ISO-год неделиЭти значения необходимы в ситуациях, когда дата относится к неделе, принадлежащей другому календарному году.
Пример:
import isoWeek from 'dayjs/plugin/isoWeek'
dayjs.extend(isoWeek)
dayjs().format('GGGG') // например "2026"
Токен Do активируется через плагин
advancedFormat и добавляет порядковое представление дня
месяца:
D — день месяца (1–31)Do — день месяца с суффиксом (1st, 2nd, 3rd)import advancedFormat from 'dayjs/plugin/advancedFormat'
dayjs.extend(advancedFormat)
dayjs('2026-05-01').format('Do MMMM') // "1st May"
Этот формат тесно связан с локализацией, так как суффиксы зависят от языка.
Плагин advancedFormat добавляет набор токенов, которые
делают форматирование более выразительным и приближенным к
Moment.js.
Основные расширения:
Qo — порядковый кварталk — час от 1 до 24kk — час с ведущим нулём (01–24)X — Unix timestamp в секундахx — Unix timestamp в миллисекундахПример:
dayjs().format('X') // 1716370000
dayjs().format('x') // 1716370000123
Эти значения используются в API, логировании и системах синхронизации времени.
Плагин localizedFormat добавляет предопределённые
шаблоны, которые зависят от языка окружения.
Токены:
L — локализованная дата (например, 22.05.2026)LL — полная дата (22 мая 2026 г.)LLL — дата и времяLLLL — расширенная форма с днём неделиLT — время (HH:mm)LTS — время с секундамиimport localizedFormat from 'dayjs/plugin/localizedFormat'
dayjs.extend(localizedFormat)
dayjs().format('LL') // "22 мая 2026 г."
dayjs().format('LLLL') // "пятница, 22 мая 2026 г., 14:30"
Эти форматы стандартизируют вывод без необходимости вручную комбинировать токены.
При форматировании строки иногда требуется вывести текст, совпадающий с токенами. Day.js использует квадратные скобки для экранирования.
[text] — выводит текст без интерпретации как
токеныПример:
dayjs().format('DD [день месяца]')
Результат:
22 день месяца
Скобки позволяют безопасно комбинировать статический текст и динамические значения без конфликтов с системой токенов.
Дополнительные токены, связанные с локализацией и неделей:
E — день недели (ISO, 1–7)e — локализованный день недели (0–6 или 1–7 в
зависимости от локали)dddd — полное название дня неделиddd — сокращённое название дня неделиdayjs().format('dddd') // "пятница"
dayjs().format('E') // 5
Эти токены активно используются в интерфейсах календарей и планировщиков.
Сложные форматы строятся путём сочетания нескольких расширений одновременно. Например, дата с кварталом, неделей года и локализованным временем:
dayjs()
.format('[Q:] Q [Week:] w [Time:] LT')
Результат:
Q: 2 Week: 34 Time: 14:30
Подобные конструкции позволяют формировать компактные строки для аналитических панелей и отчётных систем без дополнительной обработки данных.
Расширенные токены не входят в базовый пакет Day.js и активируются только через плагины. Это влияет на поведение форматирования:
Система построена таким образом, чтобы минимизировать размер библиотеки и сохранять модульность, оставляя расширения на усмотрение проекта.