Skip to content

DatePicker 日期选择器 ​

xy-date-picker 是中后台筛选栏和表单中的日期录入组件。当前版本已统一为一套选择器,通过 type 切换支持单值、范围、月份、年份和周选择。当你需要时分秒时用 xy-time-picker;需要固定步长时间点时用 xy-time-select。

基础用法 ​

最常见的用法是绑定一个 YYYY-MM-DD 字符串,并允许用户清空选择。

基础用法日期选择

日期选择器用于选择单个日期,支持清空操作。

可选范围限制 ​

min 和 max 用来限制可选日期范围,适合筛选栏里只允许选择某个时间窗口的场景。

限制范围:2026-03-01 至 2026-03-31

范围选择 ​

把 type 设为 daterange 后,会输出 [start, end] 形式的字符串数组。

月份、年份与周 ​

type 可以切到 month / year / week,用同一套触发器承载不同粒度的日期值。

快捷项 ​

shortcuts 适合筛选栏里常见的“今天”“最近一周”这类快速录入。

实例级样式收口 ​

当后台项目只想让日期面板更贴近当前主题时,优先通过 popper-class / popper-style 收口面板、快捷项和日期格视觉,不要 deep 到内部类名。

表单场景 ​

DatePicker 放在 xy-form-item 内部时,会参与 change / blur 校验。

组件边界与场景选择 ​

  • DatePicker:日期粒度选择(日/月/年/周/范围),值是日期字符串或日期范围数组。适合订单日期、统计周期、报告月份等场景。
  • TimePicker:时分秒自由输入选择,值是时间字符串或时间范围数组。适合提醒时间、排班起始点等需要精确到秒/分钟的场景。
  • TimeSelect:固定步长时间点选择,值是离散时间字符串。适合预约时段、营业窗口这类"整点或半点"场景。
  • 如果你需要日期+时间的完整录入,用 DatePicker + TimePicker 组合;如果只需要固定时间点列表,优先用 TimeSelect。

type 场景映射 ​

type 值适用场景输出值形态
'date'订单日期、筛选日期string(如 '2025-05-23')
'daterange'统计周期、报告时间窗口[string, string]
'month'月度统计、月度报告string(如 '2025-05')
'year'年度统计string(如 '2025')
'week'周度统计string(格式取决于 value-format)

值形态 ​

model-value 类型 ​

  • DatePickerValue = string | [string, string] | null
  • 单值模式(date / month / year / week):值为单个日期字符串
  • 范围模式(daterange):值为 [start, end] 二元数组
  • 清空后值为 null

format 与 value-format 的区别 ​

  • format:控制触发器中日期的展示格式,如 YYYY年MM月DD日。只影响显示,不影响输出值。
  • value-format:控制 model-value 的输出格式,如 YYYY-MM-DD。决定对外 emit 的值字符串格式。
  • 如果不传 value-format,默认跟随 type 对应的标准格式(date → YYYY-MM-DD,month → YYYY-MM,year → YYYY)。
  • 典型用法:format="YYYY/MM/DD" + value-format="YYYY-MM-DD" → 触发器显示 2025/05/23,但 model-value 仍然是 2025-05-23。

min / max 与 disabled-date 的区别 ​

  • min / max:字符串形式的全局可选日期范围边界,适合"只允许选近 30 天"这类固定窗口。
  • disabled-date:函数形式 (date: Date) => boolean,适合更复杂的禁用逻辑(如禁用周末、禁用特定节假日)。
  • 两者可以同时使用,取并集:被 min/max 排除的日期会被禁用,被 disabled-date 返回 true 的日期也会被禁用。

键盘与行为约定 ​

  • 触发器支持 Enter / Space / ArrowDown 打开面板。
  • 面板中支持方向键移动日期,Enter / Space 选中,Escape 关闭。
  • type="daterange" 时,值会按 [start, end] 输出。
  • shortcuts 只负责快速写值,不改变当前 type。

命名映射 ​

Vue 模板中 props 和 events 使用 kebab-case,源码 / TS 类型层使用 camelCase,两者由 Vue 自动转换,等价:

Props 映射 ​

模板写法(kebab-case)源码 / TS 写法(camelCase)
model-valuemodelValue
value-formatvalueFormat
disabled-datedisabledDate
prefix-iconprefixIcon
suffix-iconsuffixIcon
clear-iconclearIcon
popper-classpopperClass
popper-stylepopperStyle
append-toappendTo

其余属性(type、placeholder、disabled、clearable、size、min、max、format、shortcuts、separator、editable、teleported、placement)为单词形式,模板与源码写法一致。

Events 映射 ​

模板写法(kebab-case)源码 emit 写法(camelCase)
update:model-valueupdate:modelValue
visible-changevisibleChange

其余事件(change、clear、focus、blur)为单单词,模板与源码写法一致。

下方 API 表格统一按模板层推荐写法列出。

API ​

DatePicker Attributes ​

属性说明类型默认值
model-value当前值string | [string, string] | nullnull
type选择类型'date' | 'daterange' | 'month' | 'year' | 'week''date'
placeholder占位文本string | string[]'请选择日期'
disabled是否禁用booleanfalse
clearable是否支持清空booleanfalse
size组件尺寸ComponentSize跟随全局配置
min最小可选日期stringundefined
max最大可选日期stringundefined
format展示格式string跟随 type 默认格式
value-format输出值格式string跟随 type 默认格式
shortcuts快捷项DatePickerShortcut[][]
disabled-date自定义禁用日期(date: Date) => booleanundefined
separator范围模式分隔符(当前版本未生效,面板固定使用"至")stringundefined
editable是否允许手动输入(当前版本未生效)booleanundefined
prefix-icon触发器前置图标(当前版本未生效)stringundefined
suffix-icon触发器后置图标(当前版本未生效,面板固定使用日历图标)stringundefined
clear-icon清空图标(当前版本未生效,固定使用 mdi:close-circle)stringundefined
teleported是否把面板传送到 bodybooleantrue
append-to面板挂载目标string | HTMLElement'body'
placement面板弹出位置Placement'bottom-start'
popper-class面板自定义类名string''
popper-style面板自定义样式StyleValueundefined

DatePicker Events ​

事件说明参数
update:model-value更新日期值DatePickerValueChangeHandler
change选中值变化DatePickerValueChangeHandler
clear清空日期—
visible-change面板开关状态DatePickerVisibleChangeHandler
focus打开面板时触发—
blur关闭面板时触发—