JGuang

时间选择框

TimePicker · Ant Design

交互预览
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

时间选择框

输入或选择时间的控件。

何时使用

当用户需要输入一个时间,可以点击标准输入框,弹出时间面板进行选择。

代码演示

  • 基本 · basic

  • 受控组件 · value

  • 三种大小 · size

  • 选择确认 · need-confirm

  • 禁用 · disabled

  • 选择时分 · hide-column

  • 步长选项 · interval-options

  • 附加内容 · addon

  • 12 小时制 · 12hours

  • 滚动即改变 · change-on-scroll

  • 范围选择器 · range-picker

  • 形态变体 · variant

  • 自定义状态 · status

  • 前后缀 · suffix

  • 自定义语义结构的样式和类 · style-class

API


通用属性参考:通用属性

import dayjs from 'dayjs';
import customParseFormat from 'dayjs/plugin/customParseFormat'

dayjs.extend(customParseFormat)
<TimePicker defaultValue={dayjs('13:30:56', 'HH:mm:ss')} />;
参数说明类型默认值版本全局配置
allowClear自定义清除按钮boolean | { clearIcon?: ReactNode }true5.8.0: 支持对象类型6.4.0
addonTimePicker 面板底部的附加内容渲染函数,请使用 renderExtraFooter 替代() => ReactNode--×
cellRender自定义单元格的内容(current: number, info: { originNode: React.ReactElement, today: dayjs, range?: 'start' | 'end', subType: 'hour' | 'minute' | 'second' | 'meridiem' }) => React.ReactNode-5.4.0×
changeOnScroll在滚动时改变选择值booleanfalse5.14.0×
classNames用于自定义组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-5.25.0
defaultValue默认时间dayjs-×
disabled禁用全部操作booleanfalse×
disabledTime不可选择的时间DisabledTime-4.19.0×
format展示的时间格式stringHH:mm:ss×
getPopupContainer定义浮层的容器,默认为 body 上新建 divfunction(trigger)-×
hideDisabledOptions隐藏禁止选择的选项booleanfalse×
hourStep小时选项间隔number1×
inputReadOnly设置输入框为只读(避免在移动设备上打开虚拟键盘)booleanfalse×
minuteStep分钟选项间隔number1×
needConfirm是否需要确认按钮,为 false 时失去焦点即代表选择boolean-5.14.0×
open面板是否打开booleanfalse×
placeholder没有值的时候显示的内容string | [string, string]请选择时间×
placement选择框弹出的位置bottomLeft bottomRight topLeft topRightbottomLeft×
popupClassName弹出层类名,请使用 classNames.popup 替换string-×
popupStyle弹出层样式对象, 请使用 styles.popup 替换CSSProperties-×
prefix自定义前缀ReactNode-5.22.0×
previewValue当用户选择时间悬停选项时,输入字段的值会发生临时更改false | hoverhover6.0.0×
renderExtraFooter选择框底部显示自定义的内容() => ReactNode-×
secondStep秒选项间隔number1×
showNow面板是否显示“此刻”按钮boolean-4.4.0×
size输入框大小,large 高度为 40px,small 为 24px,默认是 32pxlarge | medium | small-×
status设置校验状态'error' | 'warning' | 'success' | 'validating'-4.19.0×
styles用于自定义组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props })=> Record<SemanticDOM, CSSProperties>-5.25.0
suffixIcon自定义的选择框后缀图标ReactNode-6.3.0
use12Hours使用 12 小时制,为 true 时 format 默认为 h:mm:ss abooleanfalse×
value当前时间dayjs-×
variant形态变体outlined | borderless | filled | underlinedoutlined5.13.0 | underlined: 5.24.05.19.0
onCalendarChange待选日期发生变化的回调。info 参数自 4.4.0 添加function(dates: [dayjs, dayjs], dateStrings: [string, string], info: { range:start|end })-×
onChange时间发生变化的回调function(time: dayjs, timeString: string): void-×
onClear点击清除按钮时的回调() => void-6.5.0×
onOpenChange面板打开/关闭时的回调(open: boolean) => void-×

DisabledTime

type DisabledTime = (now: Dayjs) => {
  disabledHours?: () => number[];
  disabledMinutes?: (selectedHour: number) => number[];
  disabledSeconds?: (selectedHour: number, selectedMinute: number) => number[];
  disabledMilliseconds?: (
    selectedHour: number,
    selectedMinute: number,
    selectedSecond: number,
  ) => number[];
};

注意:disabledMilliseconds 为 5.14.0 新增。

方法

名称描述版本
blur()移除焦点
focus()获取焦点

RangePicker

属性与 DatePicker 的 RangePicker 相同。还包含以下属性:

参数说明类型默认值版本
disabledTime不可选择的时间RangeDisabledTime-4.19.0
order始末时间是否自动排序booleantrue4.1.0

RangeDisabledTime

type RangeDisabledTime = (
  now: Dayjs,
  type = 'start' | 'end',
) => {
  disabledHours?: () => number[];
  disabledMinutes?: (selectedHour: number) => number[];
  disabledSeconds?: (selectedHour: number, selectedMinute: number) => number[];
};

Semantic DOM

语义节点原生说明版本
root根元素,包含相对定位、行内flex布局、内边距、边框圆角、过渡动画等日期选择器容器的基础样式—
prefix前缀元素,包含flex布局、右外边距等前缀内容的布局样式—
input输入框元素,包含相对定位、宽度、颜色、字体、行高、过渡动画等输入框的核心交互样式—
suffix后缀元素,包含flex布局、颜色、行高、指针事件、过渡动画等后缀内容的样式—
popup.root弹出框元素—
popup.container容器元素,设置背景色、内边距、圆角、阴影、边框和内容展示样式—
popup.content弹出框内容元素,包含日期表格的宽度、边框、单元格等内容展示样式—
popup.item弹出框单项元素,包含日期单元格的尺寸、背景色、边框圆角、悬停态、选中态等交互样式—
popup.footer弹出框底部元素,包含确认取消按钮、快捷选择等底部操作区域的布局样式—

语义说明来源: vendor/components/date-picker/demo/_semantic.tsx

主题变量(Design Token)

类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。

令牌类型原生说明
presetsWidthnumber预设区域宽度
presetsMaxWidthnumber预设区域最大宽度
zIndexPopupnumber弹窗 z-index

声明来源: vendor/components/date-picker/style/token.ts

import { FastColor } from '@ant-design/fast-color';

import type { SharedComponentToken, SharedInputToken } from '../../input/style/token';

import { initComponentToken } from '../../input/style/token';

import type { MultipleSelectorToken, SelectorToken } from '../../select/style/token';

import type { ArrowToken } from '../../style/roundedArrow';

import { getArrowToken } from '../../style/roundedArrow';

import type {
  FullToken,
  GetDefaultToken,
  GlobalToken,
  TokenWithCommonCls,
} from '../../theme/internal';

export interface PanelComponentToken extends MultipleSelectorToken {
  /**
   * @desc 单元格悬浮态背景色
   * @descEN Background color of cell hover state
   */
  cellHoverBg: string;
  /**
   * @desc 选取范围内的单元格背景色
   * @descEN Background color of cell in range
   */
  cellActiveWithRangeBg: string;
  /**
   * @desc 选取范围内的单元格悬浮态背景色
   * @descEN Background color of hovered cell in range
   */
  cellHoverWithRangeBg: string;
  /**
   * @desc 单元格禁用态背景色
   * @descEN Background color of disabled cell
   */
  cellBgDisabled: string;
  /**
   * @desc 选取范围时单元格边框色
   * @descEN Border color of cell in range when picking
   */
  cellRangeBorderColor: string;
  /**
   * @desc 时间列宽度
   * @descEN Width of time column
   */
  timeColumnWidth: number;
  /**
   * @desc 时间列高度
   * @descEN Height of time column
   */
  timeColumnHeight: number;
  /**
   * @desc 时间单元格高度
   * @descEN Height of time cell
   */
  timeCellHeight: number;
  /**
   * @desc 单元格高度
   * @descEN Height of cell
   */
  cellHeight: number;
  /**
   * @desc 单元格宽度
   * @descEN Width of cell
   */
  cellWidth: number;
  /**
   * @desc 单元格文本高度
   * @descEN Height of cell text
   */
  textHeight: number;
  /**
   * @desc 十年/年/季/月/周单元格高度
   * @descEN Height of decade/year/quarter/month/week cell
   */
  withoutTimeCellHeight: number;
}

export interface ComponentToken
  extends Exclude<SharedComponentToken, 'addonBg'>,
    PanelComponentToken,
    ArrowToken {
  /**
   * @desc 预设区域宽度
   * @descEN Width of preset area
   */
  presetsWidth: number;
  /**
   * @desc 预设区域最大宽度
   * @descEN Max width of preset area
   */
  presetsMaxWidth: number;
  /**
   * @desc 弹窗 z-index
   * @descEN z-index of popup
   */
  zIndexPopup: number;
}

export type PickerPanelToken = {
  pickerCellCls: string;
  pickerCellInnerCls: string;
  pickerDatePanelPaddingHorizontal: number | string;
  pickerYearMonthCellWidth: number | string;
  pickerCellPaddingVertical: number | string;
  pickerQuarterPanelContentHeight: number | string;
  pickerCellBorderGap: number;
  pickerControlIconSize: number;
  pickerControlIconMargin: number;
  pickerControlIconBorderWidth: number;
};

export interface PickerToken
  extends FullToken<'DatePicker'>,
    PickerPanelToken,
    SharedInputToken,
    SelectorToken {
  /** @private Used for internal calculation */
  INTERNAL_FIXED_ITEM_MARGIN: number;
}

export type SharedPickerToken = TokenWithCommonCls<GlobalToken> &
  PickerPanelToken &
  PanelComponentToken;

FAQ

原生通用属性

Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。

参数说明类型默认值
style自定义样式CSSProperties-
className自定义类名string-
rootClassName添加在组件最外层的 classNamestring-
autoFocus自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效booleanfalse

安装并复现示例

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。

原生类型参考

源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。

  • vendor/components/time-picker/index.tsx

来源与许可

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。