Skip to content

DatePicker 日期选择器

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

基础用法

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

基础用法日期选择

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

可选范围限制

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

限制范围: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 对应的标准格式(dateYYYY-MM-DDmonthYYYY-MMyearYYYY)。
  • 典型用法: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

其余属性(typeplaceholderdisabledclearablesizeminmaxformatshortcutsseparatoreditableteleportedplacement)为单词形式,模板与源码写法一致。

Events 映射

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

其余事件(changeclearfocusblur)为单单词,模板与源码写法一致。

下方 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-circlestringundefined
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关闭面板时触发