Pikaday предоставляет мощный механизм работы с форматированием даты
через встроенный форматтер, который позволяет как отображать дату в
пользовательском формате, так и корректно парсить строки в объекты
Date. Форматтер задаётся через параметр format
при инициализации календаря и тесно интегрируется с настройками
локализации.
Форматтер использует шаблоны, аналогичные библиотеке
moment.js, но реализован внутри самой библиотеки Pikaday.
Он позволяет преобразовывать объект Date в строку и
обратно, поддерживая следующие ключевые элементы:
D — день месяца без ведущего нуля (1–31).DD — день месяца с ведущим нулём (01–31).M — месяц без ведущего нуля (1–12).MM — месяц с ведущим нулём (01–12).MMM — сокращённое название месяца (Jan,
Feb и т.д. для английской локали).MMMM — полное название месяца (January,
February).YY — двухзначный год.YYYY — полный четырёхзначный год.Форматтер работает синхронно при выборе даты пользователем, при
вызове метода getDate() возвращает объект
Date, а метод toString() или
getMoment().format() (если используется MomentJS) позволяет
получить строковое представление.
Для задания формата даты используется параметр
format:
const picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD/MM/YYYY'
});
В этом примере выбран день с ведущим нулём, месяц с ведущим нулём и
полный четырёхзначный год. При выборе даты в поле ввода будет отображена
строка вида 01/06/2026.
Форматтер позволяет использовать любой разделитель, включая
-, ., пробел или любой пользовательский
символ. Например:
format: 'YYYY.MM.DD'
Иногда стандартный форматтер недостаточен, и требуется полностью
контролировать процесс преобразования даты в строку и обратно. Для этого
Pikaday предоставляет параметры toString и
parse:
toString(date, format) — функция,
преобразующая объект Date в строку по заданному
формату.parse(dateString, format) — функция,
преобразующая строку в объект Date.Пример пользовательского форматтера:
const picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD/MM/YYYY',
toString: function(date, format) {
const day = ('0' + date.getDate()).slice(-2);
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const year = date.getFullYear();
return `${day}-${month}-${year}`; // возвращаем с дефисами вместо слэшей
},
parse: function(dateString, format) {
const parts = dateString.split('-');
const day = parseInt(parts[0], 10);
const month = parseInt(parts[1], 10) - 1;
const year = parseInt(parts[2], 10);
return new Date(year, month, day);
}
});
В этом примере поле ввода будет отображать дату в формате
01-06-2026, а при вводе строки в этом формате календарь
корректно создаст объект Date.
Форматтер учитывает параметры локали (i18n) для названий
месяцев и дней недели. При использовании формата MMM или
MMMM Pikaday автоматически подставляет локализованные
значения:
const picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD MMMM YYYY',
i18n: {
previousMonth : 'Пред',
nextMonth : 'След',
months : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
weekdays : ['Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'],
weekdaysShort : ['Вс','Пн','Вт','Ср','Чт','Пт','Сб']
}
});
Здесь формат DD MMMM YYYY при выборе даты
1 июня 2026 будет отображать 01 Июнь 2026.
Использование нестандартных разделителей или нестандартного порядка
компонентов даты возможно с помощью комбинации toString и
parse. Это особенно полезно для специфических требований,
например, форматов ISO, кастомных форматов финансовых приложений или
систем отчётности.
Date в Pikaday.toString и parse имеют приоритет
над стандартным format.null, что позволяет обрабатывать ошибки
ввода.Date, но не управляет часовыми поясами напрямую. Для
точного управления временем рекомендуется использовать MomentJS или
Luxon в комбинации с Pikaday.i18n
совместно с форматами MMM и MMMM.toString и parse для полной гибкости.null при некорректном формате.Использование встроенного форматтера в Pikaday обеспечивает гибкость и точное управление отображением и разбором даты, делая календарь пригодным как для простых форм, так и для сложных интерфейсов с кастомными требованиями.