UNPKG

zent

Version:

一套前端设计语言和基于React的实现

237 lines (185 loc) 19.8 kB
--- title: DatePicker subtitle: 日期时间选择 path: component/date-picker group: 信息录入 --- ## DatePicker 时间选择组件, 提供基础的时间、日期、日期时间筛选功能。 ### 使用指南 - 包含以下组件:`DatePicker``WeekPicker``MonthPicker``QuarterPicker``YearPicker``DateRangePicker``CombinedDateRangePicker``TimePicker``TimeRangePicker``CombinedTimeRangePicker``SingleCalendarDatePanelPicker``CombinedPanelRangePicker`- `DatePicker``CombinedDateRangePicker``DateRangePicker``SingleCalendarDatePanelPicker``CombinedPanelRangePicker` 可以通过 `showTime` 属性来支持时间的选择。 ### API #### 共用的日期组件 API | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ------------ | --------------------------------------------------------------------- | ----------------------------------------- | ------------------------ | -------- | | value | 选择的日期 | - | - | 是 | | onChange | 选择日期回调函数 | - | - | 是 | | valueType | onChange 返回日期的类型,可选值:`'string'` \| `'number'` \| `'date'` | `string` | `'string'` | 否 | | format | 设置字符串日期的格式 | `string` | 不同组件默认值不同,下详 | 否 | | disabledDate | 不可选择的日期 | `(date: Date) => {}` \| `IDisableDateMap` | - | 否 | | defaultDate | 默认面板日期 | `string` \| `Date` \| `number` | `new Date()` | 否 | | disabled | 禁用状态 | `boolean` | `false` | 否 | | canClear | 日期是否可清除 | `boolean` | `true` | 否 | | openPanel | 控制面板是否打开 | `boolean` | `false` | 否 | | onOpen | 面板打开的回调 | `function` | - | 否 | | onClose | 面板关闭的回调 | `function` | - | 否 | | width | 组件 input 的 宽度 | `string` \| `number` | - | 否 | | className | 自定义样式类 | `string` | `''` | 否 | ```ts interface IDisableDateMap { min?: string | Date | number; // 最小可选日期 max?: string | Date | number; // 最大可选日期 } ``` **注意:** - `value``onChange` 必须同时提供 ### DatePicker 其他 API | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ------------ | -------------------- | ---------------------------------------- | -------------- | -------- | | value | 选择的日期 | `string` \| `Date` \| `number` | - | 是 | | onChange | 选择日期回调函数 | `(date: string | Date | number) => {}` | - | 是 | | placeholder | 输入框提示文字 | `string` | `'请选择日期'` | 否 | | format | 设置字符串日期的格式 | `string` | `'YYYY-MM-DD'` | 否 | | hideFooter | 隐藏面板底部 | `boolean` | `false` | 否 | | showTime | 是否支持时间选择功能 | `boolean` \| `object` | `false` | 否 | | disabledTime | 时间禁用判断 | `(date?: Date) => IDisabledTimeOption` | - | 否 | | showLunarDate | 是否显示农历日期 | `boolean` | `false` | 否 | | lunarValueFormatter | 格式化农历日期回填值 | `(date: Date) => string` | - | 否 | **注意:** - `showTime` 为对象时,表示支持时间选择,具体属性可参考 `TimePicker`,包括 `format``hourStep``minuteStep``secondStep`,其中 `defaultTime` 类型定义为 `string | (date: Date) => string` - `disabledTime``showTime` 开启时生效,可参考 `TimePicker``IDisabledTimeOption` - `showTime``format` 值应为`'YYYY-MM-DD HH:mm:ss'`,使用时注意 `format` 参数 - `showTime``format` 值应为`'YYYY-MM-DD HH:mm:ss'`,使用时注意 `format` 参数 - `lunarValueFormatter``showLunarDate` 开启时生效 ### WeekPicker 其他 API | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ------------ | -------------------- | ----------------------------------------------- | ------------------------ | -------- | | value | 选择的日期 | `Array<string | Date | number>` | - | 是 | | onChange | 选择日期回调函数 | `(date: Array<string | Date | number>) => {}` | - | 是 | | placeholder | 输入框提示文字 | `string` | `'请选择自然周'` | 否 | | weekStartsOn | 一周的开始 | `WeekStartsOnMap` | `WeekStartsOnMap.Monday` | 否 | | format | 设置字符串日期的格式 | `string` | `'YYYY-MM-DD'` | 否 | | hideFooter | 隐藏面板底部 | `boolean` | `false` | 否 | **注意:** - `WeekPicker``value``onChange` 回调日期均为数组 - `WeekStartsOnMap` 枚举: `'Sunday'``'Monday'``'Tuesday'``'Wednesday'``'Thursday'``'Friday'``'Saturday'` ### YearPicker / MonthPicker 其他 API | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ----------- | -------------------- | ---------------------------------------- | -------------------------------- | -------- | | value | 选择的日期 | `string` \| `Date` \| `number` | - | 是 | | onChange | 选择日期回调函数 | `(date: string | Date | number) => {}` | - | 是 | | placeholder | 输入框提示文字 | `string` | `'请选择年份'` \| `'请选择月份'` | 否 | | format | 设置字符串日期的格式 | `string` | `'YYYY'` \| `'YYYY-MM'` | 否 | **注意:** - `YearPicker` / `MonthPicker``value``onChange` 回调日期均为单个日期 ### QuarterPicker 其他 API | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ----------- | -------------------- | ----------------------------------------------- | -------------- | -------- | | value | 选择的日期 | `Array<string | Date | number>` | - | 是 | | onChange | 选择日期回调函数 | `(date: Array<string | Date | number>) => {}` | - | 是 | | placeholder | 输入框提示文字 | `string` | `'请选择季度'` | 否 | | format | 设置字符串日期的格式 | `string` | `'YYYY-MM'` | 否 | **注意:** - `QuarterPicker``value``onChange` 回调日期均为数组 ### TimePicker API | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ------------ | ------------------------------------- | --------------------------- | -------------- | -------- | | value | 时间 | `string` | - | 是 | | onChange | 选择时间回调函数 | `(date: string ) => {}` | - | 是 | | defaultTime | 默认时间 | `string` | - | 否 | | placeholder | 输入框提示文字 | `string` | `'请选择时间'` | 否 | | format | 返回的时间的格式 (决定面板展示的列) | `string` | `'HH:mm:ss'` | 否 | | disabledTime | 时间禁用判断 | `() => IDisabledTimeOption` | - | 否 | | hourStep | 小时选项间隔 | `number` | `1` | 否 | | minuteStep | 分钟选项间隔 | `number` | `1` | 否 | | secondStep | 秒选项间隔 | `number` | `1` | 否 | ```ts interface IDisabledTimeOption { disabledHours?: () => number[]; disabledMinutes: (hour: number) => number[]; disabledSeconds?: (hour: number, minute: number) => number[]; } ``` ### SingleCalendarDatePanelPicker API | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ----------------- | ------------------------------------------------------------------- | -------------------------------------- | ------- | -------- | | selected | 日期 | `Date\|null` | - | 是 | | onSelected | 选择时间回调函数 | `(date: Date ) => {}` | - | 是 | | defaultPanelDate | 默认面板日期 | `Date` | - | 否 | | disabledPanelDate | 日期禁用判断 | `(date:Date) => boolean` | - | 是 | | onChangePanel | 切换面板日期的回调 | `(type:IPickerType) => {}` | - | 否 | | onPanelDateChange | 切换面板日期后,具体面板日期的回调 | `(date:Date) => {}` | - | 否 | | hideFooter | 隐藏面板底部 | `boolean` | `false` | 否 | | showTime | 是否支持时间选择功能 | `boolean` \| `object` | `false` | 否 | | disabledTime | 时间禁用判断 | `(date?: Date) => IDisabledTimeOption` | - | 否 | | popText | 选中日期后的 pop 文案 | `string` | - | 否 | | footerText | 底部定位到现在的快捷按钮文案 | `string` | - | 否 | | combinedLeft | 是否为组合日历面板的左侧日历,是则隐藏本组件顶部右侧的下个月/下一年 | `boolean` | false | 否 | | combinedRight | 是否为组合日历面板的右侧日历,是则隐藏本组件顶部左侧的下个月/下一年 | `boolean` | false | 否 | | hoverRangeDate | 指定 hover 的日期区域 | `[Date,Date]\|null` | - | 否 | | rangeDate | 已选中的日期区域 | `[Date,Date]\|null` | - | 否 | ```ts interface IDisabledTimeOption { disabledHours?: () => number[]; disabledMinutes: (hour: number) => number[]; disabledSeconds?: (hour: number, minute: number) => number[]; } ``` ### DateRangePicker / CombinedDateRangePicker API (基于 DatePicker) | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ----------- | ---------------- | ----------------------------------------------- | ------------------------- | -------- | | value | 选择的日期 | `Array<string | Date | number>` | - | 是 | | onChange | 选择日期回调函数 | `(date: Array<string | Date | number>) => {}` | - | 是 | | placeholder | 输入框提示文字 | `[string, string]` | `['开始日期','结束日期']` | 否 | | defaultDate | 默认面板日期 | `[string, string]` | - | 否 | | dateSpan | 日期跨度 | `number` | - | 否 | **注意:** - `showTime` 为对象时,`defaultTime` 类型为 `[string | (date: Date) => string, string | (date: Date) => string]`,表示默认开始时间和默认结束时间(不填为['00:00:00','23:59:59']) - `disabledDate``disabledTime` 回调方法的第二个参数均为`type?: 'start' | 'end'` - `dateSpan``DateRangePicker``CombinedDateRangePicker` 组件可用 - `DateRangePicker``disabled``canClear` 属性类型为 `boolean | boolean[]` ### CombinedPanelRangePicker (基于 DateRangePicker 和 TimePicker ) | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | --------------- | --------------------------------------------------------------------- | ----------------------------------------------- | -------------- | -------- | | value | 选择的日期 | `Array<string \| Date \| number>\|null` | - | 是 | | onChange | 选择日期回调函数 | `(date: Array<string \| Date \| number>) => {}` | - | 是 | | defaultDate | 默认面板日期 | `[string, string]` | - | 否 | | dateSpan | 日期跨度 | `number` | - | 否 | | valueType | onChange 返回日期的类型,可选值:`'string'` \| `'number'` \| `'date'` | `string` | `'string'` | 否 | | format | 设置字符串日期的格式 | `string` | `'YYYY-MM-DD'` | 否 | | disabledDate | 不可选择的日期 | `(date: Date) => {}` \| `IDisableDateMap` | - | 否 | | showTime | 是否支持时间选择功能 | `boolean` \| `object` | `false` | 否 | | hideConfirm | 如果开启了 showTime,是否要隐藏 footer 的“确定”按钮 | `boolean` | `false` | 否 | | className | 整个组件的 class | `string` | - | 否 | | leftClassName | 左侧日历的 class | `string` | - | 否 | | rightClassName | 右侧日历的 class | `string` | - | 否 | | footerClassName | 如果开启了 showTime,footer 组件的 class | `string` | - | 否 | **注意:** - `showTime` 为对象时,`defaultTime` 类型为 `[string | (date: Date) => string, string | (date: Date) => string]`,表示默认开始时间和默认结束时间(不填为['00:00:00','23:59:59']) - `disabledDate``disabledTime` 回调方法的第二个参数均为`type?: 'start' | 'end'` ### TimeRangePicker / CombinedTimeRangePicker API (基于 TimePicker) | 参数 | 说明 | 类型 | 默认值 | 是否必须 | | ----------- | ---------------- | --------------------------------- | -------------------------- | -------- | | value | 时间 | `[string, string]` | - | 是 | | onChange | 选择时间回调函数 | `(date: [string, string] ) => {}` | - | 是 | | defaultTime | 默认时间 | `[string, string]` | - | 否 | | placeholder | 输入框提示文字 | `[string, string]` | `['开始时间', '结束时间']` | 否 | **注意:** - `disabledTime` 回调方法的第二个参数均为`type?: 'start' | 'end'` ### 工具函数 - 提供时间禁用的处理方法:`disabledTimeWithRange``getDisabledDateAndTimeWithRangeProps` 等,需要从 `zent/es/date-picker/disabledHelpers` 引入。 #### 格式化字符表 | | 字符 | 输出 | | --------- | ---- | --------------------------------- | | **Year** | YY | 70 71 ... 29 30 | | | YYYY | 1970 1971 ... 2029 2030 | | **Month** | M | 1 2 ... 11 1 | | | MM | 01 02 ... 11 12 | | | MMM | 1 月, 2 月 ... 11 月, 12 月 | | | MMMM | 一月, 二月 ... 十一月, 十二月 | | **Date** | D | 1 2 ... 30 31 | | | DD | 01 02 ... 30 31 | | | d | 0 1 ... 5 6 | | | ddd | 周日, 周一 ... 周五, 周六 | | | dddd | 星期日, 星期一 ... 星期五, 星期六 |