Skip to content

DatetimePicker 日期时间选择器

DatetimePickerView 的封装组件,内置日期时间列构建与弹窗交互。

组件类型

基本用法

v-model 绑定当前值,点击确认后通过 confirm 返回结果。

html
<wd-datetime-picker v-model="value" v-model:visible="show" @confirm="handleConfirm" />
ts
const value = ref<number>(Date.now())
const show = ref(false)
const handleConfirm = ({ value }: { value: number | string | Array<number | string> }) => {
  console.log(value)
}

限制可选时间范围

使用 min-datemax-date 约束日期范围。

html
<wd-datetime-picker v-model="value" v-model:visible="show" :min-date="minDate" :max-date="maxDate" />
ts
const value = ref<number>(Date.now())
const show = ref(false)
const minDate = new Date(new Date().getFullYear(), 0, 1).getTime()
const maxDate = new Date(new Date().getFullYear() + 1, 11, 31, 23, 59, 59).getTime()

组件状态

确定前校验

设置 before-confirm,在点击确定时执行拦截校验,支持返回 booleanPromise<boolean>

html
<wd-datetime-picker v-model="value" v-model:visible="show" :before-confirm="beforeConfirm" />
ts
const value = ref<number>(Date.now())
const show = ref(false)
const beforeConfirm = (value: number | string | Array<number | string>) => {
  if (Array.isArray(value)) return true
  if (typeof value === 'number') return value <= Date.now()
  return true
}

组件变体

类型切换

支持 datetimedateyear-monthyeartime 五种类型。

html
<wd-datetime-picker v-model="dateValue" type="date" />
<wd-datetime-picker v-model="yearMonthValue" type="year-month" />
<wd-datetime-picker v-model="yearValue" type="year" />
<wd-datetime-picker v-model="timeValue" type="time" />
<wd-datetime-picker v-model="datetimeValue" type="datetime" />
ts
const dateValue = ref<number>(Date.now())
const yearMonthValue = ref<number>(Date.now())
const yearValue = ref<number>(Date.now())
const timeValue = ref<string>('09:20')
const datetimeValue = ref<number>(Date.now())

开启秒选择

timedatetime 类型下可通过 use-second 显示秒。

html
<wd-datetime-picker v-model="timeValue" type="time" use-second />
<wd-datetime-picker v-model="value" type="datetime" use-second />
ts
const timeValue = ref<string>('09:20:30')
const value = ref<number>(Date.now())

区间选择

v-model 为数组时开启区间选择模式。

html
<wd-datetime-picker v-model="rangeValue" v-model:visible="show" />
ts
const rangeValue = ref<(string | number)[]>(['', Date.now()])
const show = ref(false)

组件样式

自定义列项格式

通过 formatter 自定义滚筒内选项文案。

html
<wd-datetime-picker v-model="value" :formatter="formatter" />
ts
const formatter = (type: string, value: number) => {
  switch (type) {
    case 'year':
      return `${value}年`
    case 'month':
      return `${value}月`
    case 'date':
      return `${value}日`
    case 'hour':
      return `${value}时`
    case 'minute':
      return `${value}分`
    case 'second':
      return `${value}秒`
    default:
      return `${value}`
  }
}

过滤列选项

通过 filter 过滤可选项列表。

html
<wd-datetime-picker v-model="value" :filter="filter" />
ts
const filter = ({ type, values }: { type: string; values: number[] }) => {
  if (type === 'minute') {
    return values.filter((value) => value % 5 === 0)
  }
  return values
}

自定义区间 Tab 文案

区间选择模式下通过 display-format-tab-label 格式化开始/结束标签显示。

html
<wd-datetime-picker v-model="rangeValue" :display-format-tab-label="displayFormatTabLabel" />
ts
const displayFormatTabLabel = (items: Array<{ label: string | number }>) => {
  return `${items[0].label}年${items[1].label}月${items[2].label}日 ${items[3].label}:${items[4].label}`
}

Attributes

参数说明类型默认值
v-model / modelValue绑定值。time 类型为字符串;区间模式为数组;其余类型为时间戳string | number | Array<string | number>-
visible / v-model:visible是否显示弹窗booleanfalse
type选择器类型,可选值为 datetimedateyear-monthtimeyearstringdatetime
title弹出层标题string-
cancel-button-text取消按钮文案string-
confirm-button-text确认按钮文案string-
close-on-click-modal点击遮罩是否关闭booleantrue
safe-area-inset-bottom弹出面板是否设置底部安全距离booleantrue
item-height单项高度number44
visible-item-count可见项数量number6
value-key选项值字段名stringvalue
label-key选项文案字段名stringlabel
min-date最小日期(时间戳)number当前年份前 10 年 1 月 1 日
max-date最大日期(时间戳)number当前年份后 10 年 12 月 31 日 23:59:59
min-hour最小小时(time 类型生效)number0
max-hour最大小时(time 类型生效)number23
min-minute最小分钟(time 类型生效)number0
max-minute最大分钟(time 类型生效)number59
use-second v1.10.0是否显示秒选择,仅 timedatetime 生效booleanfalse
min-second v1.10.0最小秒数,仅 timedatetime 生效number0
max-second v1.10.0最大秒数,仅 timedatetime 生效number59
formatter自定义滚筒选项格式化函数DatetimePickerViewFormatter-
filter自定义过滤函数DatetimePickerViewFilter-
before-confirm确定前校验函数,接收 (value),返回 booleanPromise<boolean>DatetimePickerBeforeConfirm-
display-format-tab-label区间模式下自定义 Tab 标签格式化函数DatetimePickerDisplayFormatTabLabel-
z-index弹窗层级number15
immediate-change v1.2.25是否在手指松开时立即触发 change(仅微信/支付宝小程序)booleanfalse
root-portal v1.11.0是否脱离文档流渲染(H5: teleport,App: renderjs,小程序: root-portal)booleanfalse
custom-class根节点自定义类名string''
custom-style根节点自定义样式string''
custom-view-classpickerView 外部自定义样式类string''

Events

事件名称说明参数
open打开弹窗时触发-
cancel点击取消或关闭弹窗时触发-
confirm点击确认按钮触发{ value }
change选中值变化时触发{ value }
toggle区间模式切换开始/结束 Tab 时触发当前激活 Tab 对应的值

Methods

方法名称说明参数
open打开 picker 弹框-
close关闭 picker 弹框-

主题定制

CSS 变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 全局配置

名称默认值描述
--wot-datetime-picker-popup-radius$radius-large $radius-large $radius-zero $radius-zero日期时间选择器弹窗圆角
--wot-datetime-picker-title-color$text-main标题文字颜色
--wot-datetime-picker-title-height$n-56标题区域高度
--wot-datetime-picker-title-font-size$typography-title-size-main标题文字字号
--wot-datetime-picker-title-line-height$typography-title-line--height-size-main标题文字行高
--wot-datetime-picker-title-font-weight$font-weight-medium标题文字字重
--wot-datetime-picker-title-padding$padding-zero $padding-loose标题区域内边距
--wot-datetime-picker-action-font-size$typography-body-size-large操作按钮字号
--wot-datetime-picker-action-line-height$typography-body-line--height-size-large操作按钮行高
--wot-datetime-picker-action-color$primary-6操作按钮文字颜色
--wot-datetime-picker-range-padding0 $padding-loose $padding-extra-loose范围标签内边距
--wot-datetime-picker-range-font-size$typography-body-size-main范围标签字号
--wot-datetime-picker-range-item-font-size$typography-body-size-extra-large范围标签项字号
--wot-datetime-picker-range-item-font-weight$font-weight-medium范围标签项字重
--wot-datetime-picker-range-item-line-height$typography-body-line--height-size-extra-large范围标签项行高
--wot-datetime-picker-range-item-padding$spacing-loose $spacing-zero范围标签项内边距
--wot-datetime-picker-range-item-color$primary-6范围标签项颜色
--wot-datetime-picker-range-item-placeholder-color$text-placeholder占位符颜色
--wot-datetime-picker-range-item-line-color$primary-6范围标签项下划线颜色
--wot-datetime-picker-range-item-line-placeholder-color$border-main范围标签项下划线占位符颜色
--wot-datetime-picker-range-separator-margin$spacing-zero $spacing-tight分隔符水平间距
--wot-datetime-picker-range-separator-color$text-auxiliary分隔符颜色
--wot-datetime-picker-range-separator-width$n-8分隔符宽度
--wot-datetime-picker-range-separator-height$stroke-main分隔符高度

源代码

文档
组件

Released under the MIT License.

Released under the MIT License.