DatePicker

DatePickers 结合了 DateInput 和 Calendar 弹出框,允许用户输入或选择日期和时间值。


安装

以上命令仅用于单独安装。如果已全局安装 @heroui/react,则可以跳过此步骤。

导入

用法

禁用状态

只读

必填

变体

标签位置

您可以通过将 labelPlacement 属性设置为 insideoutsideoutside-left 来更改标签的位置。

注意:如果未传递 label,则 labelPlacement 属性将默认为 outside

带描述

您可以通过传递 description 属性向日期选择器添加描述。

带错误消息

您可以组合使用 isInvaliderrorMessage 属性来显示无效输入。

您还可以将错误消息作为函数传递。这允许基于 ValidationResult 进行动态错误消息处理。

使用月份和年份选择器

您可以通过将 showMonthAndYearPickers 属性设置为 true,在日历弹出窗口中显示月份和年份选择器。 但是,如果将大于 1 的数字传递给 visibleMonths 属性,则将禁用此功能。

使用时间字段

选择器图标

您可以使用 selector 属性在日期选择器的开头和结尾添加内容。

选择器按钮位置

您可以通过将 selectorButtonPlacement 属性设置为 startend 来更改选择器按钮的位置。

受控

您可以使用 valueonChange 属性来控制输入值。

时区

当以 ZonedDateTime 对象作为值提供时,DatePicker 具有时区感知能力。 在这种情况下,将显示时区缩写,并且在操作值时会考虑时区问题,例如夏令时。

@internationalized/date 包含将多种格式的字符串解析为 ZonedDateTime 对象的函数。

粒度

granularity 属性允许您控制 DatePicker 显示的最小单位。 默认情况下,该值以“day”粒度(年、月和日)显示,而 CalendarDateTimeZonedDateTime 值以“minute”粒度显示。

@internationalized/date 包含将多种格式的字符串解析为 ZonedDateTime 对象的函数。

最小日期和最大日期

minValuemaxValue 属性也可用于确保该值在特定范围内。

@internationalized/date 包含将多种格式的字符串解析为 ZonedDateTime 对象的函数。

国际日历

DatePicker 支持选择世界上许多日历系统中的日期,包括公历、希伯来历、印度历、伊斯兰历、佛教历等等。 日期会自动以用户区域设置的相应日历系统显示。 可以使用 Unicode 日历区域设置扩展来覆盖日历系统,该扩展传递给 I18nProvider 组件。

@internationalized/date 包含将多种格式的字符串解析为 ZonedDateTime 对象的函数。

不可用日期

DatePicker 支持将某些日期标记为不可用。 用户无法选择这些日期,并且在日历中以划掉的外观显示。 在日期字段中,如果用户输入不可用日期,则会显示无效状态。

@internationalized/date 包含将多种格式的字符串解析为 ZonedDateTime 对象的函数。

可见月份

默认情况下,日历弹出窗口显示单个月份。 visibleMonths 属性允许一次显示最多 3 个月,如果屏幕空间允许。

页面行为

默认情况下,当按下“下一个”或“上一个”按钮时,分页将按 visibleMonths 值前进。 可以通过将 pageBehavior 设置为 single,将此行为更改为一次翻页一个月。

预设

@internationalized/date 包含将多种格式的字符串解析为 ZonedDateTime 对象的函数。

插槽

  • base: 输入框的包装器,它处理对齐、放置和整体外观。
  • selectorButton: 选择器按钮元素。
  • selectorIcon: 选择器图标元素。
  • popoverContent: 日历弹出窗口元素。
  • calendar: 日历元素。
  • calendarContent: 日历的内容元素。
  • timeInputLabel: 时间输入组件的标签元素。
  • timeInput: 时间输入组件元素。

数据属性

DatePickerbase 元素上具有以下属性

  • data-slot: 所有插槽都具有此属性。 表示元素属于哪个插槽(例如,calendar)。
  • data-open: 指示日历弹出窗口是否打开。
  • data-invalid: 当日期选择器无效时。 基于 isInvalid 属性。
  • data-required: 当日期选择器为必填项时。 基于 isRequired 属性。
  • data-readonly: 当日期选择器为只读时。 基于 isReadOnly 属性。
  • data-disabled: 当日期选择器被禁用时。 基于 isDisabled 属性。

无障碍访问

  • 每个日期和时间单位都显示为可单独聚焦和编辑的片段,这使得用户可以使用键盘轻松编辑任何日期格式和区域设置的日期。
  • 用户还可以打开日历弹出窗口,在标准月份网格中选择日期。
  • 包含本地化的屏幕阅读器消息,用于在选择和可见日期范围更改时进行通知。
  • 日期片段可以使用易于使用的数字键盘进行编辑,并且所有交互都可以使用基于触摸的屏幕阅读器进行访问。
  • 与 HTML 表单集成,支持必填、最小值和最大值、不可用日期、自定义验证函数、实时验证和服务器端验证错误

API

DatePicker 属性

属性类型默认值
label
ReactNode
value
ZonedDateTime | CalendarDate | CalendarDateTime | undefined | null
variant
flat | bordered | faded | underlined
"flat"
color
default | primary | secondary | success | warning | danger
"default"
size
sm | md | lg
"md"
radius
none | sm | md | lg | full
defaultValue
string
placeholderValue
ZonedDateTime | CalendarDate | CalendarDateTime | undefined | null
description
ReactNode
errorMessage
ReactNode | (v: ValidationResult) => ReactNode
validate
(value: MappedDateValue<DateValue>) => ValidationError | true | null | undefined
validationBehavior
native | aria
"native"
startContent
ReactNode
endContent
ReactNode
labelPlacement
inside | outside | outside-left
"inside"
isRequired
boolean
false
isReadOnly
boolean
false
isDisabled
boolean
false
isInvalid
boolean
false
visibleMonths
number
"1"
selectorIcon
ReactNode
pageBehavior
PageBehavior
"visible"
calendarWidth
number
"256"
isDateUnavailable
(date: DateValue) => boolean
autoFocus
boolean
false
hourCycle
12 | 24
granularity
day | hour | minute | second
hideTimeZone
boolean
false
shouldForceLeadingZeros
boolean
true

DatePicker 事件

属性类型默认值
onChange
(value: ZonedDateTime | CalendarDate | CalendarDateTime) => void
onFocus
(e: FocusEvent<HTMLInputElement>) => void
onBlur
(e: FocusEvent<HTMLInputElement>) => void
onFocusChange
(isFocused: boolean) => void
onKeyDown
(e: KeyboardEvent) => void
onKeyUp
(e: KeyboardEvent) => void