Одна из ключевых задач при работе с датами — преобразование
внутренних представлений времени в человекочитаемые строки. В Day.js это
реализуется через метод format(), который опирается на
шаблоны, похожие на Moment.js, но с более компактной архитектурой.
Базовое форматирование:
import dayjs from 'dayjs';
dayjs().format();
// ISO-строка по умолчанию: 2026-05-23T12:34:56+00:00
Day.js поддерживает токены форматирования:
dayjs().format('YYYY-MM-DD');
// 2026-05-23
Основные токены:
YYYY — полный годMM — месяц с ведущим нулёмDD — день месяцаHH — часы (24-часовой формат)mm — минутыss — секундыПример комбинированного формата:
dayjs().format('YYYY-MM-DD HH:mm:ss');
// 2026-05-23 14:05:10
При подключении локалей форматирование может учитывать язык:
import 'dayjs/locale/ru';
dayjs.locale('ru');
dayjs().format('DD MMMM YYYY');
// 23 мая 2026
Важно учитывать, что локализация влияет только на текстовые элементы (месяцы, дни недели), но не изменяет структуру формата.
Преобразование строк в объект Day.js — один из самых частых сценариев при работе с API, формами и внешними источниками данных.
dayjs('2026-05-23');
Day.js автоматически интерпретирует ISO-форматы, однако для нестандартных строк требуется явное указание структуры через дополнительные плагины (например, CustomParseFormat).
При подключении расширения можно задать формат:
import customParseFormat from 'dayjs/plugin/customParseFormat';
dayjs.extend(customParseFormat);
dayjs('23/05/2026', 'DD/MM/YYYY');
Это позволяет избежать неоднозначностей, особенно при работе с региональными форматами.
После парсинга важно проверять корректность:
const d = dayjs('invalid date');
d.isValid(); // false
Валидация критична при обработке пользовательского ввода, где ошибки формата неизбежны.
Несмотря на собственный формат хранения, Day.js легко конвертируется
в нативный объект Date.
const jsDate = dayjs().toDate();
Этот механизм используется при взаимодействии с:
setTimeout,
Intl)Особенность заключается в том, что конвертация не теряет точности, но может приводить к изменениям в таймзоне при дальнейшей обработке.
Unix-время — универсальный формат хранения времени в секундах или миллисекундах.
dayjs().valueOf();
// миллисекунды
dayjs().unix();
// секунды
Разница принципиальна:
valueOf() — миллисекунды (стандарт JS)unix() — секунды (Unix standard)dayjs(1716460800000);
dayjs.unix(1716460800);
Этот подход часто используется при работе с базами данных и REST API.
Day.js позволяет легко переходить между различными строковыми представлениями времени.
const d = dayjs('2026-05-23');
d.format('DD.MM.YYYY');
// 23.05.2026
Фактически происходит цепочка:
Это делает библиотеку удобной для трансформации данных между слоями приложения.
Форматирование не влияет на саму дату:
const d = dayjs('2026-05-23');
d.format('YYYY');
// 2026
d.format('DD/MM/YYYY');
// 23/05/2026
Объект остаётся неизменным, что соответствует принципу иммутабельности.
При необходимости можно расширять точность до миллисекунд:
dayjs().format('YYYY-MM-DD HH:mm:ss.SSS');
// 2026-05-23 14:05:10.123
Миллисекунды особенно важны в:
При сериализации объектов Day.js в JSON используется автоматическое преобразование:
JSON.stringify({
date: dayjs()
});
Результат:
{
"date": "2026-05-23T12:34:56.000Z"
}
Фактически вызывается toISOString().
ISO 8601 является стандартом обмена датами:
dayjs().toISOString();
Особенности:
Пример:
2026-05-23T12:34:56.000Z
Без дополнительных плагинов Day.js работает в локальной временной
зоне среды выполнения. При использовании utc-расширения
появляется возможность явно управлять конвертацией.
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);
dayjs.utc('2026-05-23').format();
Теперь строка интерпретируется как UTC-время.
При интеграции с API часто требуется строгий формат:
dayjs().toISOString();
dayjs().format('YYYY-MM-DD HH:mm:ss');
dayjs().format('YYYY-MM-DDTHH:mm:ss.SSSZ');
Каждый формат соответствует требованиям конкретной системы хранения или передачи данных.
Часто входные данные содержат относительные конструкции:
Day.js преобразует их через цепочку методов:
dayjs().add(2, 'day').format('YYYY-MM-DD');
или
dayjs().subtract(1, 'day').format();
Хотя это не прямой парсинг строки, концептуально это часть конвертации форматов времени.
При обработке внешних источников часто требуется привести разные форматы к единому виду:
const normalized = dayjs(input).format('YYYY-MM-DD');
Где input может быть:
Day.js выполняет унификацию в один внутренний формат, после чего применяется единое правило вывода.
Важно учитывать особенности преобразований:
format() точность сохраняется полностьюtoDate() возможны ограничения JavaScript Dateunix() происходит округление до секундdayjs().millisecond(123).unix();
// миллисекунды теряются
Это критично при системах, где важна высокая точность временных меток.
Типичный сценарий в приложениях:
const apiDate = dayjs(input)
.utc()
.format('YYYY-MM-DDTHH:mm:ss[Z]');
Здесь выполняется:
Такой подход обеспечивает стабильность данных при передаче между сервисами.