Форматирование в Day.js основано на системе токенов, где каждый
элемент даты и времени представляется специальной последовательностью
символов. Основной метод для преобразования объекта даты в строку —
format(). Он принимает строку шаблона и возвращает
отформатированное значение.
Метод format() работает на основе разбиения даты на
логические компоненты: год, месяц, день, часы, минуты, секунды и
дополнительные элементы календаря. Каждый компонент задаётся отдельным
токеном.
import dayjs from 'dayjs';
const date = dayjs('2026-05-22T14:35:10');
date.format('YYYY-MM-DD HH:mm:ss');
// 2026-05-22 14:35:10
Строка шаблона интерпретируется последовательно. Символы, не являющиеся токенами, выводятся как есть, что позволяет формировать произвольные строки:
date.format('YYYY год, MM месяц, DD число');
// 2026 год, 05 месяц, 22 число
Система токенов Day.js заимствована из Moment.js и использует строгие обозначения.
YYYY — полный год (2026)YY — последние две цифры года (26)dayjs().format('YYYY'); // 2026
dayjs().format('YY'); // 26
MM — месяц с ведущим нулём (01–12)M — месяц без ведущего нуля (1–12)MMM — сокращённое название месяца (Jan, Feb)MMMM — полное название месяца (January, February)dayjs('2026-01-01').format('MM'); // 01
dayjs('2026-01-01').format('MMM'); // Jan
dayjs('2026-01-01').format('MMMM'); // January
DD — день месяца с ведущим нулёмD — день месяца без ведущего нуляdayjs('2026-05-02').format('DD'); // 02
dayjs('2026-05-02').format('D'); // 2
d — номер дня недели (0–6)dd — сокращённое название (Su, Mo)ddd — сокращённое название с локалью (Sun, Mon)dddd — полное название дня недели (Sunday, Monday)dayjs().format('dddd'); // Friday
Часы, минуты и секунды представлены отдельными токенами.
HH — 24-часовой формат с ведущим нулёмH — 24-часовой формат без нуляhh — 12-часовой формат с нулёмh — 12-часовой формат без нуляmm — минутыm — минуты без ведущего нуляss — секундыs — секунды без ведущего нуляSSS — миллисекундыconst t = dayjs('2026-05-22T08:05:09.123');
t.format('HH:mm:ss');
// 08:05:09
t.format('hh:mm:ss A');
// 08:05:09 AM
Для обозначения AM/PM используется токен A или
a:
A — AM / PM в верхнем регистреa — am / pm в нижнем регистреdayjs('2026-05-22T14:00:00').format('hh:mm A');
// 02:00 PM
При необходимости вывести текст, совпадающий с токенами, используется механизм экранирования через квадратные скобки.
dayjs().format('[Сегодня:] YYYY-MM-DD');
// Сегодня: 2026-05-22
Все символы внутри [] выводятся без интерпретации.
Day.js поддерживает локализацию через плагины и подключение языковых пакетов. После подключения локали форматирование названий месяцев и дней недели становится зависимым от выбранного языка.
import 'dayjs/locale/ru';
dayjs.locale('ru');
dayjs().format('D MMMM YYYY');
// 22 май 2026
Локаль влияет на:
Базовый набор токенов покрывает основные сценарии, однако расширенные
форматы подключаются через advancedFormat.
Дополнительные токены:
Do — день месяца с порядковым суффиксом (1st, 2nd,
3rd)Qo — квартал с суффиксомwo — номер недели в годуimport advancedFormat from 'dayjs/plugin/advancedFormat';
dayjs.extend(advancedFormat);
dayjs('2026-05-22').format('Do MMMM YYYY');
// 22nd May 2026
Работа с неделями требует внимательного использования токенов:
w — неделя годаww — неделя с ведущим нулёмW — ISO неделяWW — ISO неделя с ведущим нулёмdayjs('2026-01-01').format('w');
// номер недели года
ISO-нумерация отличается от локальной, что важно при работе с календарными системами в бизнес-логике.
Day.js позволяет форматировать временные метки Unix (миллисекунды или секунды) через обычную конвертацию:
dayjs.unix(1700000000).format('YYYY-MM-DD HH:mm:ss');
Также поддерживается создание объекта из миллисекунд:
dayjs(1700000000000).format('YYYY-MM-DD');
Форматирование часто используется для генерации человекочитаемых строк с несколькими уровнями информации:
dayjs().format('dddd, DD MMMM YYYY [в] HH:mm');
// Friday, 22 May 2026 в 14:35
Такие конструкции позволяют объединять структурированные данные с текстовыми вставками без дополнительных операций над строками.
Базовая библиотека Day.js не выполняет полноценное управление
часовыми поясами без плагинов. Однако при подключении utc и
timezone поведение форматирования меняется.
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);
dayjs().tz('Europe/Moscow').format('YYYY-MM-DD HH:mm');
Форматирование остаётся тем же, но входные данные интерпретируются в контексте указанной зоны.
Система токенов чувствительна к регистру. Даже небольшое изменение символа приводит к другому результату или отсутствию интерпретации.
Примеры различий:
MM — месяцmm — минутыdayjs().format('MM:mm');
// 05:35 (май и минуты)
Day.js поддерживает цепочки преобразований перед форматированием:
dayjs()
.add(2, 'day')
.subtract(3, 'hour')
.format('YYYY-MM-DD HH:mm');
Форматирование всегда выполняется в конце цепочки и отражает итоговое состояние объекта.
При передаче некорректной даты форматирование возвращает строку
Invalid Date.
dayjs('invalid').format('YYYY-MM-DD');
// Invalid Date
Это поведение важно учитывать при работе с пользовательским вводом и внешними API.
Система токенов позволяет создавать сложные шаблоны отображения времени:
dayjs().format('[Дата:] YYYY/MM/DD [| Время:] HH:mm:ss');
// Дата: 2026/05/22 | Время: 14:35:10
Комбинация текстовых сегментов и токенов даёт возможность формировать шаблоны для интерфейсов, логов и отчётов без дополнительной обработки строк.
В прикладных системах форматирование часто используется для унификации логов:
dayjs().format('YYYY-MM-DDTHH:mm:ssZ');
Такой формат приближен к ISO-8601 и удобен для хранения и анализа событийных данных.
Day.js сохраняет совместимость форматов между версиями, так как система токенов зафиксирована и не подвержена частым изменениям. Это делает форматирование предсказуемым в долгосрочных проектах, где критична стабильность временных представлений.