Day.js опирается на упрощённую, но предсказуемую модель работы с
датами: входные строки интерпретируются либо как строка в стандарте ISO
8601, либо как значения, совместимые с конструктором Date в
JavaScript.
Основной принцип заключается в следующем:
Date, поведение которого зависит от окружения;import dayjs from 'dayjs';
dayjs('2026-05-23');
// ISO 8601: корректный разбор
dayjs('2026-05-23T10:15:30');
// ISO с временем: также корректно
ISO-строки являются опорной точкой, вокруг которой строится предсказуемость всей системы.
Day.js без расширений способен интерпретировать ограниченный набор стандартных представлений даты:
1. ISO 8601 (основной стандарт) Наиболее надёжный формат:
YYYY-MM-DDYYYY-MM-DDTHH:mm:ssYYYY-MM-DDTHH:mm:ssZdayjs('2026-01-10');
dayjs('2026-01-10T12:30:00Z');
Особенность заключается в том, что символ Z фиксирует
UTC-время, исключая локальные смещения.
2. Формат, совместимый с JavaScript Date
Если строка не соответствует ISO, Day.js передаёт её в
new Date():
dayjs('May 23 2026 10:30:00');
dayjs('2026/05/23');
Такой подход обеспечивает совместимость, но снижает предсказуемость. Разные движки JavaScript могут интерпретировать такие строки по-разному.
3. Timestamp (Unix-время)
Числовое значение интерпретируется как миллисекунды от Unix-эпохи:
dayjs(1716451200000);
При необходимости работы с секундами используется явное умножение:
dayjs.unix(1716451200);
Выходной формат формируется через метод format(),
использующий набор токенов.
dayjs().format('YYYY-MM-DD HH:mm:ss');
Основные стандартные токены:
| Токен | Значение |
|---|---|
YYYY |
год (4 цифры) |
YY |
год (2 цифры) |
MM |
месяц (01–12) |
DD |
день месяца |
HH |
часы (24-часовой формат) |
mm |
минуты |
ss |
секунды |
Примеры стандартного форматирования:
dayjs('2026-05-23T14:45:00').format('YYYY-MM-DD');
// 2026-05-23
dayjs('2026-05-23T14:45:00').format('DD.MM.YYYY');
// 23.05.2026
dayjs('2026-05-23T14:45:00').format('HH:mm');
// 14:45
Day.js поддерживает локализацию, которая влияет на отображение месяцев, дней недели и некоторых текстовых представлений.
import 'dayjs/locale/ru';
dayjs.locale('ru');
При использовании локалей:
dayjs().format('D MMMM YYYY');
// 23 мая 2026
Если строка не соответствует ISO и не является валидной для
Date, результат становится некорректным:
dayjs('not-a-date').isValid();
// false
Day.js не пытается «угадывать» сложные форматы без дополнительного
плагина customParseFormat.
Для строгого контроля форматов подключается расширение:
import customParseFormat from 'dayjs/plugin/customParseFormat';
dayjs.extend(customParseFormat);
После подключения становится возможным явный разбор строк:
dayjs('23-05-2026', 'DD-MM-YYYY');
dayjs('14:30:00', 'HH:mm:ss');
Это устраняет неопределённость стандартного парсинга.
Некоторые строковые представления даты соответствуют RFC2822 и также могут быть разобраны:
dayjs('Sat, 23 May 2026 10:30:00 GMT');
Однако поддержка таких строк зависит от реализации Date
в среде выполнения.
Day.js стремится привести все входные данные к единому внутреннему представлению:
Date;dayjs(new Date());
dayjs(Date.now());
dayjs('2026-05-23');
Внутренне все варианты преобразуются в момент времени в миллисекундах.
Стандарт ISO допускает указание временной зоны:
dayjs('2026-05-23T10:00:00+03:00');
Смещение учитывается при преобразовании в локальное время или UTC (при использовании соответствующих плагинов).
ISO-формат рассматривается как эталонный:
Примеры корректных ISO-строк:
dayjs('2026-05-23');
dayjs('2026-05-23T12:00:00');
dayjs('2026-05-23T12:00:00Z');
dayjs('2026-05-23T12:00:00+05:00');
Любые отклонения от структуры могут привести к частичному или некорректному разбору.
После парсинга дата может быть преобразована в стандартные строковые представления:
const d = dayjs('2026-05-23T14:30:00Z');
d.toISOString();
// 2026-05-23T14:30:00.000Z
d.format('YYYY-MM-DD HH:mm:ss');
// локализованное отображение
ISO-строка, возвращаемая toISOString(), соответствует
строгому стандарту и используется для обмена данными между
системами.
Если входное значение не может быть интерпретировано:
dayjs('invalid').isValid(); // false
Все последующие операции над такой датой сохраняют состояние невалидности, не вызывая исключений.
dayjs('invalid').format('YYYY-MM-DD');
// Invalid Date