Библиотека Cleave.js предоставляет удобный механизм для форматирования и ограничения ввода данных в полях формы, включая работу с датами и временем. Для полей дат и времени она обеспечивает автоматическое добавление разделителей, контроль допустимых значений и синхронизацию формата ввода с требованиями бизнес-логики.
Форматирование происходит по шаблону, который
задается через конфигурацию date и time.
Cleave.js поддерживает множество стандартных и кастомных разделителей,
что позволяет создавать гибкие и интуитивные интерфейсы ввода.
Для поля даты используется параметр date, который может
быть включен вместе с указанием формата через datePattern.
Например, формат DD/MM/YYYY разделяет день, месяц и год с
помощью слэшей.
const dateInput = new Cleave('.date-input', {
date: true,
datePattern: ['d', 'm', 'Y']
});
Особенности:
datePattern определяет последовательность блоков даты.
Допустимые значения: d (день), m (месяц),
Y (год).Можно использовать нестандартные разделители, задавая их через
delimiter:
const dateInput = new Cleave('.date-input', {
date: true,
datePattern: ['d', 'm', 'Y'],
delimiter: '-'
});
Для работы с временем используется конфигурация time,
поддерживающая форматы HH:mm и HH:mm:ss.
const timeInput = new Cleave('.time-input', {
time: true,
timePattern: ['h', 'm']
});
Ключевые моменты:
timePattern задает последовательность блоков:
h (часы), m (минуты), s (секунды,
если используется).Cleave.js позволяет комбинировать дату и время в одном поле, что удобно для планировщиков и календарных интерфейсов.
const datetimeInput = new Cleave('.datetime-input', {
date: true,
time: true,
datePattern: ['d', 'm', 'Y'],
timePattern: ['h', 'm'],
delimiter: ' ',
timeDelimiter: ':'
});
Пояснения:
delimiter) может
отличаться от разделителя внутри времени
(timeDelimiter).Cleave.js позволяет накладывать дополнительные ограничения на ввод,
используя опцию blocks и numericOnly для
создания масок под специфические требования.
Пример маски даты с ограничением на двухзначные числа для дней и месяцев и четырехзначные для года:
const maskedDate = new Cleave('.masked-date', {
blocks: [2, 2, 4],
delimiters: ['/', '/'],
numericOnly: true
});
Преимущества масок:
Хотя Cleave.js сам по себе не предоставляет визуальные календарные интерфейсы, его использование совместно с календарными виджетами повышает удобство ввода:
Пример с календарем:
const datePicker = new Cleave('.calendar-input', {
date: true,
datePattern: ['Y', 'm', 'd']
});
// Событие изменения через виджет
calendarWidget.onChange(date => {
datePicker.setRawValue(date);
});
Для международных приложений Cleave.js позволяет легко менять порядок блоков даты и выбирать соответствующие разделители в зависимости от локали:
DD/MM/YYYY для ЕвропыMM/DD/YYYY для СШАYYYY-MM-DD для ISO стандартовconst isoDateInput = new Cleave('.iso-date', {
date: true,
datePattern: ['Y', 'm', 'd'],
delimiter: '-'
});
Cleave.js предоставляет методы для программного управления значениями:
getRawValue() — получение значения без
разделителей.getFormattedValue() — получение значения с текущими
разделителями.setRawValue(value) — установка нового значения с
автоматическим форматированием.const dateCleave = new Cleave('.date-input', {
date: true,
datePattern: ['d', 'm', 'Y']
});
dateCleave.setRawValue('15052026'); // Автоформатирует в 15/05/2026
console.log(dateCleave.getFormattedValue()); // 15/05/2026
Для планировщиков с динамически создаваемыми полями даты и времени Cleave.js можно подключать к новым элементам через делегирование или программное создание экземпляров Cleave:
document.querySelectorAll('.dynamic-date').forEach(input => {
new Cleave(input, {
date: true,
datePattern: ['d', 'm', 'Y']
});
});
Это обеспечивает единообразный ввод и форматирование во всех полях, независимо от способа их создания на странице.
Эти возможности делают Cleave.js удобным инструментом для создания сложных планировщиков, где точность и корректность ввода даты и времени имеют критическое значение.