Для выбора даты используйте CdsDatePicker, а если нужно поле с датой и временем сразу — готовый CdsDateInput с пропом
with-time: он ставит эти часы под календарём и сам сводит всё в одну строку.
Анатомия
Каждый блок времени — это поле ввода со стрелками: значение можно набрать с клавиатуры или перебрать по одной единице. Секунды, переключатель AM/PM и кнопку «Сейчас» добавляют пропсы with-seconds, format12h и now-btn.
Вариации
Значение и формат
Время приходит в v-model строкой в формате mask — по умолчанию HH:mm. Вторым аргументом события update:model-value компонент отдаёт разобранную дату объектом: год, месяц, день, часы, минуты, секунды. Пока значение не выбрано, поля пустые и показывают подсказку 00.
Маска может включать и дату: тогда компонент меняет только время, а дату переносит из текущего значения — так одну строку делят между собой календарь и часы. На этом же построен with-time у CdsDateInput. Если модель пуста, дату для новой строки берёт default-date (формат YYYY/MM/DD), иначе — сегодняшний день.
Секунды
with-seconds добавляет третий блок. Маска расширяется автоматически: к HH:mm компонент сам дописывает :ss.
12-часовой формат
format12h показывает часы от 1 до 12 и переключатель AM/PM. На значение в модели это не влияет — формат задаёт маска, поэтому для строки с AM/PM используйте hh:mm A.
Кнопка «Сейчас»
now-btn добавляет под часами кнопку, которая ставит текущее время — пользователю не приходится перебирать значения стрелками.
Доступное время
allowed-hours, allowed-minutes и allowed-seconds принимают массивы разрешённых значений: стрелки перебирают только их, а значение вне списка компонент подтягивает к ближайшему допустимому.
Когда ограничение зависит от уже выбранного времени, вместо массивов передайте функцию allowed-time. Она вызывается отдельно для часов, минут и секунд: непроверяемые части приходят как null.
Локализация
locale принимает имя локали (ru | en) или собственный объект переводов; без пропа берётся локаль приложения. От локали зависят подпись кнопки «Сейчас» и формат по умолчанию: у en время 12-часовое, поэтому часы показываются от 1 до 12 даже без format12h — переключатель AM/PM добавляет только он.
Состояния
disabled отключает часы и приглушает их, readonly сохраняет обычный вид, но запрещает менять значение — и стрелками, и с клавиатуры.
Рекомендации
Сценарии использования
Запись на встречу
Встречи назначают в рабочие часы и по четвертям часа — allowed-hours и allowed-minutes оставляют только такие значения. Пользователь не может выбрать время, которое потом придётся отклонять.
Поле со временем
Чаще всего часы живут не на странице, а в меню у текстового поля. Готового поля для одного только времени в системе нет — соберите контрол из CdsTextInput, CdsMenu с activator="parent" и часов: вам остаются доступны все свойства и слоты поля и меню. Для ручного ввода добавьте маску: рекомендуем лёгкую (2,5 КБ) библиотеку Maska. Если вместе со временем нужна дата, поле уже есть — CdsDateInput с with-time.
Интервал «с — до»
Двум часам можно дать общее правило: allowed-time у окончания смотрит на начало и не пускает выбрать время раньше. Когда начало сдвигают за окончание, демо переносит и его — правило и код работают в паре.
Дата и время
Календарь не выбирает время, часы не выбирают дату — поставьте их рядом с общей моделью и одинаковой маской DD.MM.YYYY HH:mm: каждый компонент меняет свою часть строки. В поле ввода эта пара уже собрана — включите with-time у CdsDateInput.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
allowedHours | number[] | undefined | — | Позволяет настроить какие часы доступны для выбора. |
allowedMinutes | number[] | undefined | — | Позволяет настроить какие минуты доступны для выбора. |
allowedSeconds | number[] | undefined | — | Позволяет настроить какие секунды доступны для выбора. |
allowedTime | ((hr: number | null, min: number | null, sec: number | null) => boolean) | undefined | — | Позволяет настроить какое время доступно для выбора. |
defaultDate | string | undefined | — | Используемая дата по-умолчанию, когда модель не заполнена (в формате YYYY/MM/DD). |
disabled | boolean | null | undefined | null | Заблокированное состояние |
format12h | boolean | undefined | — | Отображает время в 12-часовом формате AM/PM. |
locale | string | TDateLocale | undefined | — | Локаль для дат. Имя локали ('ru' | 'en') или объект TDateLocale.
По умолчанию берётся текущая локаль из useLocale, иначе ru. |
mask | string | undefined | 'HH:mm' | Формат даты/времени |
modelValue | string | TDatetimeValueRange | (string | TDatetimeValueRange)[] | null | undefined | null | Значение модели |
nowBtn | boolean | undefined | — | Отображает кнопку "Сейчас". |
readonly | boolean | null | undefined | null | Только для чтения |
theme | string | undefined | — | Тема компонента |
withSeconds | boolean | undefined | — | Добавляет секунды в выбор времени. |
События
| Имя | Тип | Описание |
|---|---|---|
update:modelValue | [value: string | undefined, date: IRawDate] | Изменение значения (v-model). Передаёт отформатированное значение и объект даты. |
Exposed
| Имя | Тип | Описание |
|---|---|---|
setAm | () => void | Переключает 12-часовой формат на первую половину суток (AM). |
setHour | (hour: number) => void | Устанавливает часы. |
setMinute | (minute: number) => void | Устанавливает минуты. |
setNow | () => void | Устанавливает текущее системное время. |
setPm | () => void | Переключает 12-часовой формат на вторую половину суток (PM). |
setSecond | (second: number) => void | Устанавливает секунды. |