For AI agents: the complete documentation index is available at https://ifhover.github.io/leaf-ui/v/0.6.0/llms.txt, the full documentation bundle is available at https://ifhover.github.io/leaf-ui/v/0.6.0/llms-full.txt, and this page is available as Markdown at https://ifhover.github.io/leaf-ui/v/0.6.0/components/time-picker.md.
  • 简体中文
  • TimePicker 时间选择器

    用于选择时间。

    基础选择

    输入时间或在面板中选择小时、分钟和秒,点击确定后生效。关闭面板会放弃未确认的调整。

    basic.tsx
    import { Form, FormField, TimePicker } from '@ifhover/leaf-ui';
    
    export function TimePickerBasic() {
      return (
        <Form layout="vertical">
          <FormField label="选择时间">
            <TimePicker aria-label="选择时间" />
          </FormField>
          <FormField label="默认时间">
            <TimePicker aria-label="默认时间" defaultValue="09:30" />
          </FormField>
          <FormField label="禁用时间">
            <TimePicker aria-label="禁用时间" defaultValue="18:00" disabled />
          </FormField>
        </Form>
      );
    }
    

    受控与分钟间隔

    通过 value / onChange 管理值,minuteStep 调整分钟选项的间隔。已有值的分钟不在间隔内时,仍会保留为可选项。

    以 15 分钟为间隔,当前值:14:30
    controlled.tsx
    import { Form, FormField, Text, TimePicker } from '@ifhover/leaf-ui';
    
    import { useState } from 'react';
    
    export function TimePickerControlled() {
      const [time, setTime] = useState<string | null>('14:30');
      return (
        <Form layout="vertical">
          <FormField label="会议时间">
            <TimePicker aria-label="会议时间" value={time} onChange={setTime} minuteStep={15} />
          </FormField>
          <Text tone="muted">以 15 分钟为间隔,当前值:{time || '未选择'}</Text>
          <FormField label="保留不符合间隔的已有值">
            <TimePicker aria-label="保留时间" defaultValue="08:07" minuteStep={15} allowClear={false} />
          </FormField>
        </Form>
      );
    }
    

    12 小时制与秒

    设置 use12Hours 展示上午、下午选项;showSeconds 开启秒。12 小时制只改变显示,值仍使用 24 小时格式。

    twelve-hours.tsx
    import { Form, FormField, TimePicker } from '@ifhover/leaf-ui';
    
    export function TimePickerTwelveHours() {
      return (
        <Form layout="vertical">
          <FormField label="12小时制">
            <TimePicker aria-label="12小时制" use12Hours defaultValue="14:30" />
          </FormField>
          <FormField label="精确到秒">
            <TimePicker
              aria-label="精确到秒"
              use12Hours
              showSeconds
              secondStep={10}
              defaultValue="00:05:30"
            />
          </FormField>
        </Form>
      );
    }
    

    禁用时间

    营业时间;禁用项无法选择或通过输入提交
    capabilities.tsx
    import { Flex, Space, TimePicker } from '@ifhover/leaf-ui';
    
    export function Capabilities() {
      return (
        <Space direction="vertical" align="stretch">
          <Flex direction="column" gap="sm" align="center">
            {'营业时间;禁用项无法选择或通过输入提交'}
            <TimePicker
              use12Hours
              defaultValue="09:30"
              disabledTime={(time) => time.hour < 9 || time.hour >= 18}
              minuteStep={15}
            />
          </Flex>
        </Space>
      );
    }
    

    TimePicker API

    属性类型默认值说明
    popupPlacement'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end'—浮层相对触发控件的位置。
    popupClassNamestring—浮层的自定义类名。
    popupStyleCSSProperties—浮层的自定义样式。
    popupRender(content: React.ReactNode) => React.ReactNode—包装或补充面板内容,保留传入的内容以维持交互。
    getPopupContainer() => Element | DocumentFragment—返回浮层的挂载容器,也可返回 ShadowRoot。
    size'sm' | 'md' | 'lg''md'选择器尺寸
    status'error' | 'warning'—校验状态
    allowClearbooleantrue展示清除按钮
    inputReadOnlyboolean—只禁止手动输入,仍可在面板中选择。
    openboolean—控制面板是否展开。
    defaultOpenboolean—面板初始展开状态。
    valuestring | nullnullHH:mm 格式的受控值 / 初始值
    defaultValuestring | nullnullHH:mm 格式的受控值 / 初始值
    minuteStepnumber5分钟间隔,使用 1–60 的整数
    secondStepnumber1秒间隔,使用 1–60 的整数
    showSecondsbooleanfalse显示秒选项,值使用 HH:mm:ss
    use12Hoursbooleanfalse展示 12 小时制及上午、下午选项
    onChange(value: string | null) => void—确认选择时返回 HH:mm,清除时返回 null
    onOpenChange(open: boolean) => void—面板展开或收起
    disabledTime(parts: TimeParts) => boolean—按业务规则禁用时间,输入和面板选择使用同一规则。
    disabledbooleanfalse禁用交互。
    namestring—原生 FormData 中的字段名。
    formstring—关联的原生表单 ID。
    requiredbooleanfalse要求整体值非空,复合控件只校验一次。
    refRef<HTMLInputElement>—输入框引用

    其余原生 input 属性和 aria-* 透传至输入框;className / style 作用于外层容器。

    类型

    可导入 TimePickerProps 定义组件属性,或单独使用尺寸、校验状态类型:

    import type { TimePickerProps, ControlSize, ControlStatus } from '@ifhover/leaf-ui';

    使用说明

    传入 00:00 至 23:59 的有效时间;开启秒时使用 HH:mm:ss。时间值不包含日期或时区。未选择时面板从 09:00 开始,打开面板本身不会改变值。所有模式都通过底部确定按钮提交。

    设置 name 后,FormData 提交 HH:mm 或 HH:mm:ss 字符串,清除后为空字符串。非受控组件支持表单 reset;受控组件需重置自己的状态。

    点击输入框打开面板,↓ 移入选项。↑ / ↓ 在列内移动,Home / End 移至首尾;Tab 在小时、分钟及确认之间移动,Enter 选择或确认。Escape 放弃调整并收起;Tab 离开面板后聚焦表单中的后续控件。面板继承局部主题。

    可直接输入 HH:mm 或 HH:mm:ss,12 小时制输入支持 AM/PM 或上午/下午。按 Enter 确认输入,也可在面板中调整后点击确定。“当前时间”将草稿设为当前时间,仍需确定。无效时间不会提交;移走焦点或 Escape 放弃未确认内容。

    TimeParts

    属性类型默认值说明
    hournumber—必需。设置 hour。
    minutenumber—必需。设置 minute。
    secondnumber—必需。设置 second。