В пользовательских интерфейсах отображение дат требует баланса между читаемостью, локализацией и компактностью представления. Библиотека Day.js предоставляет набор инструментов для преобразования объектов времени в строки, подходящие для UI-компонентов: списков, карточек, таймлайнов, уведомлений и журналов событий.
Базовая операция выполняется через метод форматирования:
dayjs().format('YYYY-MM-DD HH:mm')
Результат определяется набором токенов, каждый из которых отвечает за отдельный фрагмент даты или времени:
YYYY — полный годMM — месяц с ведущим нулёмDD — день месяцаHH — часы (24-часовой формат)mm — минутыКомбинации токенов позволяют формировать любой необходимый визуальный шаблон, от технических строк до человеко-читаемых представлений.
В интерфейсах часто используется разделение форматов по уровню важности информации. Например:
dayjs().format('DD.MM.YYYY')
dayjs().format('DD MMMM YYYY')
dayjs().format('ddd, D MMM YYYY')
Различие между ними заключается не только в формате, но и в когнитивной нагрузке:
Day.js не накладывает ограничений на структуру шаблона, позволяя строить единообразную систему отображения по всему приложению.
Для корректного отображения дат в разных языках используется модуль локализации:
import 'dayjs/locale/ru'
dayjs.locale('ru')
После установки локали изменяется поведение:
Пример:
dayjs().format('D MMMM YYYY')
В русской локали: 23 мая 2026
В английской локали: 23 May 2026
Локализация особенно важна для интерфейсов, где дата является частью пользовательского контента: комментариев, публикаций, событий.
Для интерфейсов лент и уведомлений часто применяется относительное
время. В Day.js это реализуется через плагин
relativeTime.
import relativeTime from 'dayjs/plugin/relativeTime'
dayjs.extend(relativeTime)
dayjs().fromNow()
Результаты:
Такой формат снижает когнитивную нагрузку и делает интерфейс более «живым».
Сравнение времени относительно конкретной точки:
dayjs('2026-01-01').from(dayjs('2025-12-31'))
Для интерфейсов сообщений, комментариев и событий используется календарное представление:
import calendar from 'dayjs/plugin/calendar'
dayjs.extend(calendar)
dayjs().calendar()
Типичные варианты вывода:
Логика календарного отображения строится на сравнении даты с текущим днём, неделей и месяцем, что позволяет избегать избыточной точности там, где она не требуется.
UI часто требует нестандартных комбинаций полей даты. Day.js поддерживает кастомные шаблоны без дополнительной логики:
dayjs().format('YYYY/MM/DD [at] HH:mm')
Квадратные скобки фиксируют текстовые вставки, не являющиеся токенами.
Для сложных интерфейсов используются комбинированные строки:
dayjs().format('ddd, DD MMM • HH:mm')
Такие форматы применяются в карточках событий, списках задач и уведомлениях.
В интерфейсах часто встречаются неопределённые даты: незаполненные поля, необязательные события, черновики. Day.js возвращает объект даты даже при некорректных входных данных, поэтому требуется дополнительная проверка:
const date = dayjs(input)
date.isValid() ? date.format('DD.MM.YYYY') : '—'
Для UI это критично, так как некорректное отображение может ломать визуальную структуру компонентов.
При массовом рендеринге дат (таблицы, ленты событий) форматирование может стать узким местом производительности. Практикуется предварительное вычисление:
const formatted = items.map(item => ({
...item,
dateLabel: dayjs(item.date).format('DD.MM.YYYY')
}))
Дополнительная оптимизация достигается за счёт:
format() в
render-функцияхРазные UI-паттерны требуют различных стратегий отображения:
Короткий и строгий формат:
dayjs().format('YYYY-MM-DD')
Умеренно читаемый формат:
dayjs().format('DD MMM YYYY, HH:mm')
Комбинированный формат с контекстом:
dayjs().calendar()
Относительное время:
dayjs().fromNow()
В интерфейсах, где пользователи находятся в разных регионах, важно
учитывать временные зоны. С помощью плагина utc и
timezone обеспечивается корректное отображение:
import utc from 'dayjs/plugin/utc'
import timezone from 'dayjs/plugin/timezone'
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs().tz('Asia/Almaty').format('HH:mm')
Без учёта часового пояса интерфейс может отображать некорректное локальное время, особенно в глобальных приложениях.
В крупных интерфейсах форматирование дат выносится в отдельный слой — утилиту или сервис:
const formatDate = (date) =>
dayjs(date).format('DD MMM YYYY')
const formatDateTime = (date) =>
dayjs(date).format('DD MMM YYYY, HH:mm')
const formatRelative = (date) =>
dayjs(date).fromNow()
Такой подход обеспечивает:
В современных интерфейсах часто используется адаптивное отображение, где формат меняется в зависимости от расстояния до текущей даты:
const formatSmart = (date) => {
const d = dayjs(date)
if (d.isSame(dayjs(), 'day')) return d.format('HH:mm')
if (d.isSame(dayjs(), 'year')) return d.format('DD MMM')
return d.format('DD.MM.YYYY')
}
Такой подход уменьшает визуальный шум и делает интерфейс более контекстным без потери точности.