В Day.js обработка строковых дат по заданному шаблону опирается на
плагин customParseFormat, который расширяет базовые
возможности библиотеки и позволяет интерпретировать входные строки
строго в соответствии с указанной структурой. Без подключения этого
плагина Day.js ограничивается поддержкой ISO-формата и некоторых
встроенных сценариев разбора.
Для работы с форматированными строками требуется подключение плагина:
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
dayjs.extend(customParseFormat)
После активации становится доступна сигнатура:
dayjs(string, format, strict)
где:
string — исходная строка даты;format — шаблон, описывающий структуру строки;strict — режим строгой проверки соответствия.Формат строки задаётся специальными токенами, которые определяют, как Day.js будет интерпретировать входные данные:
| Токен | Значение |
|---|---|
YYYY |
год (4 цифры) |
YY |
год (2 цифры) |
MM |
месяц (01–12) |
DD |
день месяца |
HH |
часы (24-часовой формат) |
mm |
минуты |
ss |
секунды |
Пример интерпретации строки:
dayjs('2026-05-22', 'YYYY-MM-DD')
Каждый токен должен строго соответствовать части строки, иначе результатом станет некорректная дата.
Третий параметр управляет поведением проверки соответствия формату.
dayjs('2026-5-2', 'YYYY-MM-DD')
В этом случае библиотека может попытаться интерпретировать однозначные значения даже при нарушении формата. Это повышает гибкость, но снижает предсказуемость.
dayjs('2026-5-2', 'YYYY-MM-DD', true)
При включённой строгой проверке:
Invalid Date.Пример:
dayjs('2026-05-2', 'YYYY-MM-DD', true) // Invalid Date
Day.js позволяет описывать практически любые строковые структуры.
dayjs('22/05/2026', 'DD/MM/YYYY')
dayjs('22 мая 2026 14:30', 'DD MMMM YYYY HH:mm')
Для корректного разбора таких строк требуется подключение локализации:
import 'dayjs/locale/ru'
dayjs.locale('ru')
Форматирование может ограничиваться только временной частью:
dayjs('14:45:30', 'HH:mm:ss')
Такой вызов создаёт объект даты, привязанный к текущему дню, но с указанным временем.
Токен YY интерпретируется относительно текущего
века:
dayjs('26-05-22', 'YY-MM-DD')
Значение года автоматически преобразуется в диапазон, определяемый внутренними правилами библиотеки.
При несоответствии строки формату возвращается объект с состоянием недействительной даты.
const d = dayjs('invalid-date', 'YYYY-MM-DD')
d.isValid() // false
Проверка валидности выполняется через метод:
dayjs().isValid()
Day.js позволяет передавать массив форматов, которые будут проверяться последовательно:
dayjs('22-05-2026', ['YYYY/MM/DD', 'DD-MM-YYYY'])
Это используется для обработки данных из разных источников с различной структурой.
Комбинированные шаблоны позволяют разбирать полные временные метки:
dayjs('2026-05-22 18:30:45', 'YYYY-MM-DD HH:mm:ss')
При этом важно строгое соответствие пробелов и разделителей, поскольку они также являются частью формата.
Месяцы в Day.js нумеруются с учётом человеческого представления (1–12), однако внутри объекта даты используется нулевая индексация. При парсинге это скрыто от разработчика:
dayjs('2026-05-01', 'YYYY-MM-DD')
Результирующий объект корректно интерпретирует май как пятый месяц без дополнительной корректировки.
Помимо стандартных токенов, поддерживаются дополнительные элементы:
A / a — AM/PM;Z — часовой пояс;SSS — миллисекунды.Пример:
dayjs('2026-05-22 02:15:10 PM', 'YYYY-MM-DD hh:mm:ss A')
Парсинг с указанием формата имеет ряд особенностей:
Функциональность парсинга часто используется вместе с другими расширениями:
utc — работа с универсальным временем;timezone — управление часовыми поясами;customParseFormat — разбор строк.Пример совместного использования:
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
dayjs.utc('2026-05-22 12:00', 'YYYY-MM-DD HH:mm')
Если строка содержит дополнительные символы или пропущенные элементы, результат зависит от режима строгой проверки.
Нестрогий режим может игнорировать незначительные отклонения:
dayjs('2026-05-22T12:00', 'YYYY-MM-DD HH:mm')
Строгий режим требует полного соответствия шаблону, включая разделители и структуру.
При разборе строки Day.js:
Любое нарушение диапазонов приводит к инвалидному состоянию:
dayjs('2026-13-40', 'YYYY-MM-DD', true).isValid() // false
Парсинг с указанием формата применяется в ситуациях, где:
Возможны комбинированные шаблоны с текстовыми вставками:
dayjs('Дата: 22-05-2026 | Время: 18:30', '[Дата:] DD-MM-YYYY [| Время:] HH:mm')
Квадратные скобки позволяют игнорировать литеральные части строки, не интерпретируя их как токены.
После парсинга объект Day.js остаётся неизменяемым, а любые операции создают новые экземпляры:
const date = dayjs('2026-05-22', 'YYYY-MM-DD')
const updated = date.add(1, 'day')
Парсинг формата является начальной точкой построения цепочек преобразований, влияя на всю последующую работу с датой.