Day.js использует строковые шаблоны форматирования, основанные на токенах, где каждый символ или группа символов соответствует определённому фрагменту даты и времени. Механика построена на сопоставлении шаблона и внутреннего объекта даты, после чего формируется строковое представление без дополнительной обработки.
Ключевая особенность системы токенов заключается в строгой
чувствительности к регистру. Например, MM и mm
обозначают разные сущности: месяц и минуты соответственно. Ошибка в
регистре приводит к некорректному результату, так как библиотека не
выполняет автоматического исправления или угадывания намерения.
Основные токены группируются по смысловым блокам: год, месяц, день, время, доли секунды, а также вспомогательные символы локализации.
Год
Для работы с годом применяются следующие базовые токены:
YYYY — полный четырёхзначный год (например, 2026)YY — сокращённый формат года (например, 26)При форматировании:
dayjs().format('YYYY') // 2026
dayjs().format('YY') // 26
Четырёхзначный формат используется как стандартный для хранения и отображения дат, поскольку исключает неоднозначность при обработке исторических или будущих значений.
Месяц
Месяцы представлены несколькими вариантами отображения:
MM — числовой формат с ведущим нулём (01–12)M — числовой формат без ведущего нуля (1–12)MMMM — полное название месяца (January, February и
т.д., зависит от локали)MMM — сокращённое название месяца (Jan, Feb и
т.д.)Примеры:
dayjs().format('MM') // 05
dayjs().format('M') // 5
dayjs().format('MMM') // May
dayjs().format('MMMM') // May
При использовании текстовых форматов важно учитывать локализацию, так как отображение зависит от подключённых языковых пакетов.
День месяца
Для представления дня используются следующие токены:
DD — день с ведущим нулём (01–31)D — день без ведущего нуля (1–31)dayjs().format('DD') // 09
dayjs().format('D') // 9
Эти токены часто комбинируются с месяцем и годом для построения стандартных строк даты.
День недели
Для дня недели применяются текстовые и числовые представления:
d — числовой индекс дня недели (0–6, зависит от
локали)dd — короткое название дняddd — расширенное сокращениеdddd — полное название дня неделиdayjs().format('dd') // Su
dayjs().format('ddd') // Sun
dayjs().format('dddd') // Sunday
При работе с этим блоком критически важна локализация, поскольку названия дней могут существенно отличаться между языками.
Часы
Часовой компонент поддерживает два формата: 24-часовой и 12-часовой.
24-часовой формат:
HH — часы с ведущим нулём (00–23)H — часы без ведущего нуля (0–23)12-часовой формат:
hh — часы с ведущим нулём (01–12)h — часы без ведущего нуля (1–12)dayjs().format('HH') // 18
dayjs().format('H') // 18
dayjs().format('hh') // 06 (при вечернем времени)
dayjs().format('h') // 6
12-часовой формат обычно используется вместе с индикатором AM/PM.
Минуты и секунды
Минуты и секунды используют одинаковую структуру токенов:
mm — минуты с ведущим нулём (00–59)m — минуты без ведущего нуля (0–59)ss — секунды с ведущим нулём (00–59)s — секунды без ведущего нуля (0–59)dayjs().format('mm') // 04
dayjs().format('ss') // 09
Важно различать MM (месяцы) и mm (минуты),
так как это одна из наиболее частых причин ошибок при
форматировании.
Миллисекунды
Для точного времени используются токены:
SSS — миллисекунды (000–999)SS — первые две цифры миллисекунд (00–99, усечённое
значение)S — первая цифра миллисекундdayjs().format('SSS')
Этот уровень точности применяется в логировании, профилировании и обработке событий с высокой частотой.
AM/PM индикатор
Для 12-часового формата используется:
A — AM/PM в верхнем регистреa — am/pm в нижнем регистреdayjs().format('A') // AM
dayjs().format('a') // am
Этот токен не оказывает влияния на вычисление времени, а только изменяет строковое представление.
Символы разделителей и литералы
Любые символы, не являющиеся токенами, трактуются как литералы. Это позволяет строить читаемые строки формата:
dayjs().format('YYYY-MM-DD HH:mm:ss')
Результат:
2026-05-22 18:04:09
Если требуется использовать символ, который может конфликтовать с токенами, применяется экранирование через квадратные скобки:
dayjs().format('[Year:] YYYY')
Результат:
Year: 2026
Комбинирование токенов
Полноценные форматы обычно представляют собой комбинацию нескольких блоков:
dayjs().format('dddd, DD MMMM YYYY HH:mm:ss')
Такая строка объединяет день недели, дату, месяц, год и время в одном выражении. Внутренняя обработка происходит последовательно: каждый токен заменяется соответствующим значением, после чего формируется итоговая строка без дополнительной постобработки.
Чувствительность к локализации
Токены, отвечающие за текстовое представление (месяцы, дни недели), зависят от подключённой локали. В базовой конфигурации используется английская локализация, однако подключение дополнительных языков изменяет вывод без изменения самого шаблона форматирования.
Приоритет токенов и конфликт символов
При разборе строки форматирования библиотека анализирует токены по
длине, отдавая приоритет более длинным последовательностям. Это
означает, что YYYY обрабатывается как единый токен, а не
как четыре отдельных символа Y.
Такой подход предотвращает неоднозначность и обеспечивает стабильность интерпретации даже при сложных форматах, содержащих пересекающиеся паттерны.