Pikaday предоставляет гибкий механизм работы с форматами даты, позволяя разработчику контролировать как отображение даты в поле ввода, так и её внутреннее представление. Валидация формата играет ключевую роль для обеспечения корректного ввода пользователем и предотвращения ошибок при парсинге.
Pikaday использует собственный набор токенов для форматирования и парсинга дат. Основные токены включают:
D — день месяца без ведущего нуля (1–31)DD — день месяца с ведущим нулём (01–31)M — месяц без ведущего нуля (1–12)MM — месяц с ведущим нулём (01–12)MMM — сокращённое название месяца (Jan, Feb, …)MMMM — полное название месяца (January, February,
…)YY — двухзначный годYYYY — четырёхзначный годЭти токены используются как в параметре format при
инициализации виджета, так и внутри методов toString() и
parse() для контроля отображения и интерпретации даты.
formatvar picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD/MM/YYYY'
});
В этом примере дата будет отображаться как 31/12/2026.
Параметр format автоматически обеспечивает синхронизацию с
внутренним объектом Date, гарантируя, что пользовательский
ввод соответствует заданному шаблону.
Pikaday выполняет базовую проверку формата при использовании
текстового поля ввода. Если пользователь вводит дату, которая не
соответствует шаблону format, виджет игнорирует её, не
обновляя внутреннее значение. Таким образом, недопустимые строки не
превращаются в некорректные объекты Date.
onSelectДля более сложной проверки формата и дополнительных условий можно
использовать колбэк onSelect:
var picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD-MM-YYYY',
onSelect: function(date) {
var day = date.getDate();
var month = date.getMonth() + 1;
if (day > 28 && month === 2) {
alert('Февраль не может иметь более 28 дней в невисокосном году');
}
}
});
В данном примере происходит дополнительная проверка корректности дня
в феврале. Использование onSelect позволяет реализовать
любую бизнес-логику, связанную с валидацией даты, включая диапазоны дат
и исключения.
Иногда требуется проверить формат ещё до передачи данных в Pikaday. Для этого можно использовать регулярные выражения:
var datePattern = /^\d{2}-\d{2}-\d{4}$/;
var input = document.getElementById('datepicker');
input.addEventListener('blur', function() {
if (!datePattern.test(input.value)) {
alert('Некорректный формат даты, используйте DD-MM-YYYY');
input.value = '';
}
});
Этот подход позволяет блокировать некорректный ввод ещё на этапе потери фокуса поля, обеспечивая строгую проверку формата до передачи в виджет.
Pikaday поддерживает параметры minDate и
maxDate, которые можно использовать для валидации
ввода:
var picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'YYYY-MM-DD',
minDate: new Date(2020, 0, 1),
maxDate: new Date(2025, 11, 31)
});
Если пользователь вводит дату вне заданного диапазона, она автоматически игнорируется, что позволяет комбинировать проверку формата и логическую валидацию диапазона.
Для сложных сценариев валидации формата рекомендуется использовать moment.js. Пикэди можно настроить на работу с moment для парсинга и форматирования:
var picker = new Pikaday({
field: document.getElementById('datepicker'),
format: 'DD/MM/YYYY',
toString: function(date) {
return moment(date).format('DD/MM/YYYY');
},
parse: function(dateString) {
return moment(dateString, 'DD/MM/YYYY').toDate();
}
});
Это позволяет использовать все преимущества moment.js: строгую проверку формата, поддержку локализации и сложных правил валидации (например, високосные годы, рабочие дни, кастомные календари).
format,
toString и parse, чтобы исключить
несоответствия между вводом и внутренним объектом
Date.minDate,
maxDate) с пользовательской проверкой, особенно
для критических приложений.blur или
onSelect, чтобы пользователь видел обратную связь
сразу после ввода.Валидация формата в Pikaday является гибкой и может сочетать встроенные возможности с дополнительными проверками на уровне приложения, что делает её надежным инструментом для обеспечения корректного ввода дат.