Skip to content

CdsTimePicker

Выбор времени: часы, минуты и — по желанию — секунды. Значение можно набрать с клавиатуры или перебрать стрелками, а в v-model приходит строка в заданном формате (HH:mm по умолчанию), которую удобно хранить и отправлять на сервер.

Storybook GitLab Figma
Покрытие тестами: 97% — хорошее покрытие
API в спеках
21 / 21 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
39 юнит · 2 браузерных
Известные баги
7 зафиксированы тестом it.fails
Покрытие кода
97.2% строк · 88.3% ветвей замер v4.0.0-alpha.13
A11y (axe)
17 рекомендаций в 15 историях замер v4.0.0-alpha.11

Для выбора даты используйте CdsDatePicker, а если нужно поле с датой и временем сразу — готовый CdsDateInput с пропом with-time: он ставит эти часы под календарём и сам сводит всё в одну строку.

Анатомия ​

Каждый блок времени — это поле ввода со стрелками: значение можно набрать с клавиатуры или перебрать по одной единице. Секунды, переключатель AM/PM и кнопку «Сейчас» добавляют пропсы with-seconds, format12h и now-btn.

Вариации ​

Значение и формат ​

Время приходит в v-model строкой в формате mask — по умолчанию HH:mm. Вторым аргументом события update:model-value компонент отдаёт разобранную дату объектом: год, месяц, день, часы, минуты, секунды. Пока значение не выбрано, поля пустые и показывают подсказку 00.

Sandbox Storybook

Маска может включать и дату: тогда компонент меняет только время, а дату переносит из текущего значения — так одну строку делят между собой календарь и часы. На этом же построен with-time у CdsDateInput. Если модель пуста, дату для новой строки берёт default-date (формат YYYY/MM/DD), иначе — сегодняшний день.

Sandbox Storybook

Секунды ​

with-seconds добавляет третий блок. Маска расширяется автоматически: к HH:mm компонент сам дописывает :ss.

Sandbox Storybook

12-часовой формат ​

format12h показывает часы от 1 до 12 и переключатель AM/PM. На значение в модели это не влияет — формат задаёт маска, поэтому для строки с AM/PM используйте hh:mm A.

Sandbox Storybook

Кнопка «Сейчас» ​

now-btn добавляет под часами кнопку, которая ставит текущее время — пользователю не приходится перебирать значения стрелками.

Sandbox Storybook

Доступное время ​

allowed-hours, allowed-minutes и allowed-seconds принимают массивы разрешённых значений: стрелки перебирают только их, а значение вне списка компонент подтягивает к ближайшему допустимому.

Sandbox Storybook

Когда ограничение зависит от уже выбранного времени, вместо массивов передайте функцию allowed-time. Она вызывается отдельно для часов, минут и секунд: непроверяемые части приходят как null.

Sandbox Storybook

Локализация ​

locale принимает имя локали (ru | en) или собственный объект переводов; без пропа берётся локаль приложения. От локали зависят подпись кнопки «Сейчас» и формат по умолчанию: у en время 12-часовое, поэтому часы показываются от 1 до 12 даже без format12h — переключатель AM/PM добавляет только он.

Sandbox Storybook

Состояния ​

disabled отключает часы и приглушает их, readonly сохраняет обычный вид, но запрещает менять значение — и стрелками, и с клавиатуры.

Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Запись на встречу ​

Встречи назначают в рабочие часы и по четвертям часа — allowed-hours и allowed-minutes оставляют только такие значения. Пользователь не может выбрать время, которое потом придётся отклонять.

Sandbox Storybook

Поле со временем ​

Чаще всего часы живут не на странице, а в меню у текстового поля. Готового поля для одного только времени в системе нет — соберите контрол из CdsTextInput, CdsMenu с activator="parent" и часов: вам остаются доступны все свойства и слоты поля и меню. Для ручного ввода добавьте маску: рекомендуем лёгкую (2,5 КБ) библиотеку Maska. Если вместе со временем нужна дата, поле уже есть — CdsDateInput с with-time.

Sandbox Storybook

Интервал «с — до» ​

Двум часам можно дать общее правило: allowed-time у окончания смотрит на начало и не пускает выбрать время раньше. Когда начало сдвигают за окончание, демо переносит и его — правило и код работают в паре.

Sandbox Storybook

Дата и время ​

Календарь не выбирает время, часы не выбирают дату — поставьте их рядом с общей моделью и одинаковой маской DD.MM.YYYY HH:mm: каждый компонент меняет свою часть строки. В поле ввода эта пара уже собрана — включите with-time у CdsDateInput.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
allowedHoursnumber[] | undefined—Позволяет настроить какие часы доступны для выбора.
allowedMinutesnumber[] | undefined—Позволяет настроить какие минуты доступны для выбора.
allowedSecondsnumber[] | undefined—Позволяет настроить какие секунды доступны для выбора.
allowedTime((hr: number | null, min: number | null, sec: number | null) => boolean) | undefined—Позволяет настроить какое время доступно для выбора.
defaultDatestring | undefined—Используемая дата по-умолчанию, когда модель не заполнена (в формате YYYY/MM/DD).
disabledboolean | null | undefinednullЗаблокированное состояние
format12hboolean | undefined—Отображает время в 12-часовом формате AM/PM.
localestring | TDateLocale | undefined—Локаль для дат. Имя локали ('ru' | 'en') или объект TDateLocale. По умолчанию берётся текущая локаль из useLocale, иначе ru.
maskstring | undefined'HH:mm'Формат даты/времени
modelValuestring | TDatetimeValueRange | (string | TDatetimeValueRange)[] | null | undefinednullЗначение модели
nowBtnboolean | undefined—Отображает кнопку "Сейчас".
readonlyboolean | null | undefinednullТолько для чтения
themestring | undefined—Тема компонента
withSecondsboolean | 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Устанавливает секунды.