Форматирование времени в Cleave.js основано на разбиении пользовательского ввода на логические блоки — часы, минуты и секунды. Между этими блоками автоматически вставляются разделители, которые определяются конфигурацией. Основная цель механизма — обеспечить единообразный формат времени при вводе без необходимости ручной обработки строки.
Ключевой особенностью является то, что разделитель времени не
является самостоятельной сущностью: он привязан к структуре шаблона. При
изменении структуры (например, переход от HH:mm к
HH:mm:ss) изменяется и количество разделителей.
Для активации форматирования времени используется параметр:
new Cleave(input, {
time: true
});
В этом режиме библиотека автоматически:
:;По умолчанию используется классический разделитель : как
наиболее распространённый стандарт представления времени.
:Двоеточие является базовым символом, применяемым в большинстве конфигураций времени:
HH:mm → 14:35HH:mm:ss → 14:35:09Поведение разделителя:
Внутренне библиотека связывает каждый сегмент времени с фиксированной позицией, а разделитель выступает визуальным маркером между ними.
timePatternГибкость достигается через параметр timePattern, который
определяет количество блоков и, соответственно, количество
разделителей.
new Cleave(input, {
time: true,
timePattern: ['h', 'm']
});
В этом случае формат становится:
HH:mmПри расширении:
new Cleave(input, {
time: true,
timePattern: ['h', 'm', 's']
});
Формат автоматически превращается в:
HH:mm:ssРазделитель : добавляется между каждым соседним
элементом массива timePattern. Таким образом:
Хотя стандартом является :, в некоторых интерфейсах
требуется иной визуальный стиль. В Cleave.js это реализуется через
глобальный параметр delimiter.
new Cleave(input, {
time: true,
timePattern: ['h', 'm'],
delimiter: '.'
});
Результат:
14.35При использовании трёх сегментов:
new Cleave(input, {
time: true,
timePattern: ['h', 'm', 's'],
delimiter: '-'
});
Результат:
14-35-09Особенности поведения кастомного разделителя:
:;Разделители времени ведут себя динамически в зависимости от состояния ввода:
Автоматическая вставка При достижении границы сегмента разделитель появляется без действия пользователя.
Смещение при редактировании При удалении символов внутри сегмента разделитель временно исчезает и восстанавливается после корректировки.
Защита от дублирования Ввод символа разделителя вручную игнорируется, если он уже присутствует в нужной позиции.
Синхронизация с маской Разделители не нарушают позиционирование курсора, так как библиотека перерассчитывает индекс ввода.
Хотя разделители остаются одинаковыми, логика их окружения зависит от формата времени.
24-часовой формат:
00:00 — 23:5912-часовой формат (через кастомную обработку):
01:30 AM / PM логика реализуется внешнеCleave.js не добавляет AM/PM автоматически в базовом time-режиме, но разделители продолжают работать идентично.
При потере фокуса библиотека выполняет выравнивание сегментов:
Пример:
Ввод:
1:2:3
После нормализации:
01:02:03
Разделители при этом не изменяются и служат фиксированной структурной сеткой.
Внутреннее значение (rawValue) хранится без
разделителей:
new Cleave(input, {
time: true,
timePattern: ['h', 'm', 's']
});
Ввод:
14:35:09
rawValue:
143509
Это важно при:
Разделители существуют только на уровне представления и не влияют на rawValue.
Разделители времени могут быть адаптированы под нестандартные интерфейсы:
new Cleave(input, {
time: true,
timePattern: ['h', 'm', 's'],
delimiter: ' '
});
Результат:
14 35 09
В некоторых интерфейсах требуется визуальное разделение без строгого символа:
new Cleave(input, {
time: true,
timePattern: ['h', 'm', 's'],
delimiter: '\u2009'
});
Тонкий пробел позволяет сохранить читаемость без визуального перегруза.
Несмотря на гибкость, система имеет ряд ограничений:
HH.mm.ss с
разными правилами для сегментов).Если параметры изменяются во время работы:
cleaveInstance.setRawValue('123456');
или пересоздание экземпляра:
Это означает, что разделители времени полностью зависят от текущего
timePattern и delimiter, а не от исходного
ввода пользователя.