Параметр format определяет строковое представление даты,
которое будет отображаться в связанном текстовом поле
(input) при выборе значения в календаре. Это один из
ключевых механизмов управления пользовательским выводом, так как он
влияет не на внутреннее хранение даты (всегда используется объект
Date), а исключительно на визуализацию.
Внутри Pikaday даты хранятся как экземпляры Date.
Параметр format отвечает за преобразование этого объекта в
строку при отображении в поле ввода.
При выборе даты происходит следующий процесс:
Dateinput.valueТаким образом, format является слоем представления,
отделённым от логики хранения данных.
formatНаиболее распространённый вариант — строка, описывающая шаблон даты.
new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD.MM.YYYY'
});
В этом случае дата будет отображаться в виде:
24.01.2026
Если доступен встроенный форматтер или подключён
Moment.js, используются стандартные токены:
D — день месяца без ведущего нуля (1–31)DD — день месяца с ведущим нулём (01–31)M — месяц (1–12)MM — месяц с ведущим нулём (01–12)YY — последние две цифры годаYYYY — полный год (например, 2026)d — день недели (числовой индекс)dd — короткое название дня недели (зависит от
локали)ddd — сокращённое название дняdddd — полное название дняformat: 'DD/MM/YYYY'
Результат:
24/01/2026
format: 'MM/DD/YYYY'
Результат:
01/24/2026
format: 'DD MMMM YYYY'
Результат:
24 January 2026
format: 'YYYYMMDD'
Результат:
20260124
Pikaday может использовать встроенный упрощённый форматтер, если
Moment.js не подключён. В этом случае поддержка токенов
ограничена, а обработка строк становится более примитивной.
Обычно доступны базовые шаблоны:
DDMMYYYYБолее сложные конструкции могут не интерпретироваться или работать частично.
Параметр format может принимать функцию, возвращающую
строку. Это позволяет полностью контролировать форматирование.
format: function(date) {
return '...';
}
new Pikaday({
field: document.getElementById('datepicker'),
format: function(date) {
const day = date.getDate();
const month = date.getMonth() + 1;
const year = date.getFullYear();
return `${year}-${month}-${day}`;
}
});
Результат:
2026-1-24
Функциональный format полностью заменяет механизм
преобразования даты в строку.
Это означает:
Параметр format тесно связан с локализацией, но не
зависит от неё напрямую.
Pikaday позволяет задавать i18n-настройки (названия
месяцев, дней недели), однако format определяет структуру
строки.
Пример комбинированного поведения:
new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD MMMM YYYY',
i18n: {
months: ['Январь', 'Февраль', 'Март', ...],
weekdays: ['Вс', 'Пн', 'Вт', ...]
}
});
Результат:
24 Январь 2026
При подключённой библиотеке Moment.js форматирование становится более гибким и стандартизированным.
new Pikaday({
field: document.getElementById('datepicker'),
format: 'dddd, MMMM Do YYYY'
});
Результат:
Saturday, January 24th 2026
Особенности:
Do, MMMM,
dddd)formatЕсли пользователь вручную вводит дату, не соответствующую
format, возможны проблемы при парсинге.
format: 'DD-MM-YYYY'
Ввод:
2026/01/24
Результат: некорректная интерпретация или сброс значения.
format: 'DD/MM/YY'
Проблема:
Рекомендуется избегать двухзначного года в интерфейсах с высокой точностью данных.
Частая архитектурная ошибка — различие между клиентским
format и форматом, ожидаемым backend.
Например:
format: 'DD.MM.YYYY'
Но сервер ожидает:
YYYY-MM-DD
Решение обычно заключается в разделении:
format)Pikaday всегда хранит Date, поэтому рекомендуется:
format только для UIinput.value как источник
истиныconst picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD.MM.YYYY',
onSelect: function(date) {
const iso = date.toISOString();
console.log(iso);
}
});
Здесь:
format управляет отображениемonSelect используется для передачи данных в стандартном
форматеЕсли дата отсутствует:
Если передан некорректный Date:
Invalid Date или пустая строкаСтроковый format:
Функциональный format:
В типичных сценариях разница незаметна, но при массовых перерисовках стоит учитывать нагрузку.
format: 'DD.MM.YYYY'
Подходит для локальных интерфейсов с европейским стилем даты.
format: 'YYYY-MM-DD'
Используется для совместимости и API-интеграций.
format: 'DD MMMM YYYY'
Используется в интерфейсах, где важна читаемость.
format: (date) => date.toLocaleDateString('ru-RU')
Используется при необходимости интеграции с локальными API форматирования JavaScript.