В Day.js создание даты из строки выполняется через функцию
dayjs(), которая принимает строковое представление времени
и преобразует его в объект даты. По умолчанию библиотека опирается на
ISO 8601 и поведение встроенного Date, но с важными
отличиями в предсказуемости и стабильности результата.
Наиболее надёжным форматом считается ISO-строка:
import dayjs from 'dayjs';
const d1 = dayjs('2026-05-22T14:30:00');
Строки в формате ISO обрабатываются одинаково во всех окружениях, что устраняет различия между браузерами и Node.js.
При передаче строки, не соответствующей ISO, поведение зависит от среды выполнения:
const d2 = dayjs('2026/05/22 14:30');
Такие форматы могут интерпретироваться по-разному или приводить к невалидной дате.
Day.js поддерживает базовый разбор строк без дополнительных плагинов,
однако он ограничен и не предназначен для сложных пользовательских
форматов. При необходимости строгого контроля используется плагин
customParseFormat.
Без плагина возможен только прямой ISO-подобный разбор:
dayjs('2026-05-22');
dayjs('2026-05-22T14:30:00Z');
Любые отклонения от стандарта увеличивают риск некорректного результата.
Для разбора строк по произвольным шаблонам используется
customParseFormat. Он позволяет задавать формат входной
строки явно и исключает неоднозначность интерпретации.
Подключение:
import dayjs from 'dayjs';
import customParseFormat from 'dayjs/plugin/customParseFormat';
dayjs.extend(customParseFormat);
Пример разбора:
const d = dayjs('22-05-2026 14:30', 'DD-MM-YYYY HH:mm');
Формат строки задаётся вторым аргументом, что обеспечивает строгую привязку каждого элемента строки к соответствующему токену.
customParseFormat поддерживает строгий режим, при
котором строка должна полностью соответствовать шаблону.
dayjs('22-05-2026', 'DD-MM-YYYY', true);
Третий аргумент true включает строгую проверку.
Различие поведения:
Пример отклонения в строгом режиме:
dayjs('22-05-2026 extra', 'DD-MM-YYYY', true); // invalid
Возможна передача массива форматов. Разбор выполняется последовательно до первого совпадения.
dayjs('22/05/2026', ['DD-MM-YYYY', 'DD/MM/YYYY']);
Такая стратегия используется при работе с разнородными источниками данных.
При использовании customParseFormat применяются
стандартные токены:
| Токен | Значение |
|---|---|
YYYY |
год |
MM |
месяц |
DD |
день |
HH |
часы (24-часовой формат) |
mm |
минуты |
ss |
секунды |
Пример композиции:
dayjs('2026-05-22 09:15:30', 'YYYY-MM-DD HH:mm:ss');
Точность разбора зависит от количества указанных токенов. Отсутствующие части заполняются значениями по умолчанию.
При отсутствии времени в строке оно устанавливается в начало суток:
dayjs('2026-05-22', 'YYYY-MM-DD');
Результат:
Если указано только время без даты:
dayjs('14:30', 'HH:mm');
Дата устанавливается в текущий день окружения выполнения.
После разбора строка может быть признана невалидной. Проверка выполняется через метод:
const d = dayjs('invalid date');
d.isValid();
Типичные причины невалидности:
Day.js может учитывать локализацию при разборе месяцев и дней недели, если подключён соответствующий плагин и локаль:
import 'dayjs/locale/ru';
dayjs.locale('ru');
Это влияет на интерпретацию текстовых форматов:
dayjs('22 май 2026', 'DD MMM YYYY');
Day.js не поддерживает естественный язык (например, “next Monday”) без дополнительных плагинов. Такие строки требуют сторонних расширений и не входят в базовый функционал.
Наиболее распространённые ошибки связаны с неявностью формата:
MM и mmDD/MM/YYYY и
MM/DD/YYYYПример неоднозначности:
dayjs('05-06-2026'); // может трактоваться как 5 июня или 6 мая
Явное указание формата устраняет неоднозначность:
dayjs('05-06-2026', 'DD-MM-YYYY', true);
Day.js по умолчанию работает в локальной временной зоне окружения. При разборе строк с указанием UTC:
dayjs('2026-05-22T14:30:00Z');
символ Z фиксирует UTC-время.
Для расширенного управления зонами используется плагин
utc, позволяющий явно контролировать интерпретацию входных
строк и их нормализацию в UTC.