Time Picker

Hour, minute and optional AM/PM selects that produce an "HH:mm" time.
Stable
Web
iOS
Android
@advui/core
Source

24-hour

Installation

pnpm
pnpm add @advui/core
npm
npm install @advui/core

Usage

import { Field, TimePicker } from '@advui/core'

<Field label="Start time">
  <TimePicker value={time} onValueChange={setTime} hourCycle={12} minuteStep={15} />
</Field>

Examples

12-hour, 15-minute steps

Value: 14:45

API reference

TimePicker

PropTypeDefaultDescription
valuestring | null—24-hour `"HH:mm"`, whatever `hourCycle` shows.
defaultValuestring | null—Starting `value` when uncontrolled.
onValueChange(value: string | null) => void—Called once an hour and a minute are both picked, and on later changes.
hourCycle12 | 242412 adds an AM/PM select.
minuteStepnumber5Minutes between options.
minstring | null—Earliest `"HH:mm"` that can be picked. Earlier options are disabled, and a pick that leaves the time earlier moves it to the first one allowed.
maxstring | null—Latest `"HH:mm"` that can be picked, on the same day as `min` (no ranges past midnight).
idstring—Goes on the hour select, so a Field’s label targets it.
hourLabelstring'Hour'Accessible name of the hour select.
minuteLabelstring'Minute'Accessible name of the minute select.
periodLabelstring'AM or PM'Accessible name of the AM / PM select (12-hour clock only).
size'sm' | 'md' | 'lg''md'As Select.
invalidbooleanfalseError styling and `aria-invalid`.
disabledbooleanfalseNot focusable or editable.

Accessibility

  • A group of Selects, each with its own name (Hour, Minute, AM or PM). Name the group with aria-label when it is not in a Field.
  • Each Select is a listbox on web and an accessible bottom sheet on phones.

Platform notes

iOS
Each part opens as a bottom sheet.
Android
Each part opens as a bottom sheet; the back button closes it.
Since v0.5.0Last updated Nov 2, 2026Edit this page on GitHub