DatePicker

日期选择器组件,用于根据指定日期范围创建日期滑动选择器。

说明:

该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

接口

DatePicker(options?: DatePickerOptions)

根据指定范围的Date创建可以选择日期的滑动选择器。

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
options DatePickerOptions 配置日期选择器组件的参数。

DatePickerOptions对象说明

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 类型 必填 说明
start Date 指定选择器的起始日期。
默认值:Date('1970-1-1')
end Date 指定选择器的结束日期。
默认值:Date('2100-12-31')
selected Date 设置选中项的日期。
默认值:当前系统日期
从API version 10开始,该参数支持$$双向绑定变量。
mode18+ DatePickerMode 设置DatePicker显示的日期选项列。
默认值:DatePickerMode.DATE,日期列显示年、月、日三列。 小数值做取整处理。
在DatePickerDialog中,当showTime=true时,此参数不生效,显示默认年月日三列。

说明:

Date的使用请参考TimePickerOptions

DatePickerMode18+枚举说明

设置要显示的日期选项列。

原子化服务API: 从API version 18开始,该类型支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 说明
DATE 日期列显示年、月、日三列。
YEAR_AND_MONTH 日期列显示年、月二列。
MONTH_AND_DAY 日期列显示月、日二列。
此模式下,如果月份从12月变化到1月,年份不增加1年;如果月份从1月变化到12月,年份不减少1年;年份始终在当前设置的年份。

异常情形说明:

异常情形 对应结果
起始日期晚于结束日期,选中日期未设置 起始日期、结束日期和选中日期都为默认值
起始日期晚于结束日期,选中日期早于起始日期默认值 起始日期、结束日期都为默认值,选中日期为起始日期默认值
起始日期晚于结束日期,选中日期晚于结束日期默认值 起始日期、结束日期都为默认值,选中日期为结束日期默认值
起始日期晚于结束日期,选中日期在起始日期与结束日期默认值范围内 起始日期、结束日期都为默认值,选中日期为设置的值
选中日期早于起始日期 选中日期为起始日期
选中日期晚于结束日期 选中日期为结束日期
起始日期晚于当前系统日期,选中日期未设置 选中日期为起始日期
结束日期早于当前系统日期,选中日期未设置 选中日期为结束日期
日期格式不符合规范,如‘1999-13-32’ 取默认值
起始日期或结束日期早于系统有效范围 起始日期或结束日期取起始日期默认值
起始日期或结束日期晚于系统有效范围 起始日期或结束日期取结束日期默认值
起始日期与结束日期同时早于系统有效范围 起始日期与结束日期取系统有效范围最早日期
起始日期与结束日期同时晚于系统有效范围 起始日期与结束日期取系统有效范围最晚日期

系统日期范围:1900-1-31 ~ 2100-12-31

选中日期会在起始日期与结束日期异常处理完成后再进行异常情形判断处理

属性

除支持通用属性外,还支持以下属性:

lunar

lunar(value: boolean)

设置弹窗的日期是否显示农历。

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
value boolean 日期是否显示农历。
- true:展示农历。
- false:不展示农历。
默认值:false

lunar18+

lunar(isLunar: Optional<boolean>)

设置弹窗的日期是否显示农历。与lunar相比,isLunar参数新增了对undefined类型的支持。

原子化服务API: 从API version 18开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
isLunar Optional<boolean> 日期是否显示农历。
- true:展示农历。
- false:不展示农历。
当isLunar的值为undefined时,默认值:false

disappearTextStyle10+

disappearTextStyle(value: PickerTextStyle)

设置所有选项中最上和最下两个选项的文本样式。

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
value PickerTextStyle 所有选项中最上和最下两个选项的文本颜色、字号、字体粗细。
默认值:
{
color: '#ff182431',
font: {
size: '14fp',
weight: FontWeight.Regular
}
}

disappearTextStyle18+

disappearTextStyle(style: Optional<PickerTextStyle>)

设置所有选项中最上和最下两个选项的文本样式。与disappearTextStyle10+相比,style参数新增了对undefined类型的支持。

原子化服务API: 从API version 18开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
style Optional<PickerTextStyle> 所有选项中最上和最下两个选项的文本颜色、字号、字体粗细。
当style的值为undefined时,默认值:
{
color: '#ff182431',
font: {
size: '14fp',
weight: FontWeight.Regular
}
}

textStyle10+

textStyle(value: PickerTextStyle)

设置所有选项中除了最上、最下及选中项以外的文本样式。

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
value PickerTextStyle 所有选项中除了最上、最下及选中项以外的文本颜色、字号、字体粗细。
默认值:
{
color: '#ff182431',
font: {
size: '16fp',
weight: FontWeight.Regular
}
}

textStyle18+

textStyle(style: Optional<PickerTextStyle>)

设置所有选项中除了最上、最下及选中项以外的文本样式。与textStyle10+相比,style参数新增了对undefined类型的支持。

原子化服务API: 从API version 18开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
style Optional<PickerTextStyle> 所有选项中除了最上、最下及选中项以外的文本颜色、字号、字体粗细。
当style的值为undefined时,默认值:
{
color: '#ff182431',
font: {
size: '16fp',
weight: FontWeight.Regular
}
}

selectedTextStyle10+

selectedTextStyle(value: PickerTextStyle)

设置选中项的文本样式。

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
value PickerTextStyle 选中项的文本颜色、字号、字体粗细。
默认值:
{
color: '#ff007dff',
font: {
size: '20vp',
weight: FontWeight.Medium
}
}

selectedTextStyle18+

selectedTextStyle(style: Optional<PickerTextStyle>)

设置选中项的文本样式。与selectedTextStyle10+相比,style参数新增了对undefined类型的支持。

原子化服务API: 从API version 18开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
style Optional<PickerTextStyle> 选中项的文本颜色、字号、字体粗细。
当style的值为undefined时,默认值:
{
color: '#ff007dff',
font: {
size: '20vp',
weight: FontWeight.Medium
}
}

enableHapticFeedback18+

enableHapticFeedback(enable: Optional<boolean>)

设置是否开启触控反馈。

原子化服务API: 从API version 18开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数名 类型 必填 说明
enable Optional<boolean> 设置是否开启触控反馈。
默认值:true,true表示开启触控反馈,false表示不开启触控反馈。

说明:

开启触控反馈时,需要在工程的module.json5中配置requestPermissions字段开启振动权限,配置如下:

"requestPermissions": [
{
 "name": "ohos.permission.VIBRATE",
}
]

digitalCrownSensitivity18+

digitalCrownSensitivity(sensitivity: Optional<CrownSensitivity>)

设置表冠灵敏度。

原子化服务API: 从API version 18开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数名 参数类型 必填 参数描述
sensitivity Optional<CrownSensitivity> 表冠响应灵敏度。
默认值:CrownSensitivity.MEDIUM,响应速度适中。

说明:

用于穿戴设备圆形屏幕使用。组件响应表冠事件,需要先获取焦点。

PickerTextStyle10+类型说明

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

参数名 参数类型 必填 参数描述
color ResourceColor 文本颜色。
font Font 文本样式。

事件

除支持通用事件外,还支持以下事件:

onChange(deprecated)

onChange(callback: (value: DatePickerResult) => void)

选择日期时触发该事件。

从API version 8 开始支持,从 API version 10 开始废弃,建议使用onDateChange

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
value DatePickerResult 返回选中的时间。

onDateChange10+

onDateChange(callback: (value: Date) => void)

选择日期时触发该事件。

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
value Date 返回选中的时间,年月日为选中的日期,时分取决于当前系统时间的时分,秒恒为00。

onDateChange18+

onDateChange(callback: Optional<Callback<Date>>)

选择日期时触发该事件。与onDateChange10+相比,callback参数新增了对undefined类型的支持。

原子化服务API: 从API version 18开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
callback Optional<Callback<Date>> 返回选中的时间,年月日为选中的日期,时分取决于当前系统时间的时分,秒恒为00。
当callback的值为undefined时,不使用回调函数。

DatePickerResult对象说明

原子化服务API: 从API version 11开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 类型 只读 可选 说明
year number 选中日期的年。
取值范围:与start、end有关,如果没有设置start、end,则取start、end默认值[1970, 2100]。
month number 选中日期的月的索引值,索引从0开始,0表示1月,11表示12月。
取值范围:与start、end有关,如果没有设置start、end,取值范围为[0, 11]。
day number 选中日期的日。
取值范围:与start、end有关,如果没有设置start、end,取值范围为[1, 31]。

示例

示例1(切换公历农历)

该示例实现了日期选择器组件,点击按钮可以切换公历农历。

// xxx.ets
@Entry
@Component
struct DatePickerExample {
  @State isLunar: boolean = false
  private selectedDate: Date = new Date('2021-08-08')

  build() {
    Column() {
      Button('切换公历农历')
        .margin({ top: 30, bottom: 30 })
        .onClick(() => {
          this.isLunar = !this.isLunar
        })
      DatePicker({
        start: new Date('1970-1-1'),
        end: new Date('2100-1-1'),
        selected: this.selectedDate
      })
        .lunar(this.isLunar)
        .onDateChange((value: Date) => {
          this.selectedDate = value
          console.info('select current date is: ' + value.toString())
        })

    }.width('100%')
  }
}

datePicker

示例2(设置文本样式)

该示例通过配置disappearTextStyle、textStyle、selectedTextStyle设置文本样式。

// xxx.ets
@Entry
@Component
struct DatePickerExample {
  private selectedDate: Date = new Date('2021-08-08')

  build() {
    Column() {
      DatePicker({
        start: new Date('1970-1-1'),
        end: new Date('2100-1-1'),
        selected: this.selectedDate
      })
        .disappearTextStyle({ color: Color.Gray, font: { size: '16fp', weight: FontWeight.Bold } })
        .textStyle({ color: '#ff182431', font: { size: '18fp', weight: FontWeight.Normal } })
        .selectedTextStyle({ color: '#ff0000FF', font: { size: '26fp', weight: FontWeight.Regular, family: "HarmonyOS Sans", style: FontStyle.Normal } })
        .onDateChange((value: Date) => {
          this.selectedDate = value
          console.info('select current date is: ' + value.toString())
        })

    }.width('100%')
  }
}

datePicker

示例3(设置显示年、月和月、日列)

该示例通过配置mode参数实现显示年、月和月、日列。

// xxx.ets
@Entry
@Component
struct DatePickerExample {
  @State isLunar: boolean = false
  private selectedDate: Date = new Date('2025-01-15')
  @State datePickerModeList: (DatePickerMode)[] = [
    DatePickerMode.DATE,
    DatePickerMode.YEAR_AND_MONTH,
    DatePickerMode.MONTH_AND_DAY,
  ]
  @State datePickerModeIndex: number = 0;

  build() {
    Column() {
      Button('切换公历农历')
        .margin({ top: 30, bottom: 30 })
        .onClick(() => {
          this.isLunar = !this.isLunar
        })
      DatePicker({
        start: new Date('1970-1-1'),
        end: new Date('2100-1-1'),
        selected: this.selectedDate,
        mode:this.datePickerModeList[this.datePickerModeIndex]
      })
        .lunar(this.isLunar)
        .onDateChange((value: Date) => {
          this.selectedDate = value
          console.info('select current date is: ' + value.toString())
        })

      Button('mode :' + this.datePickerModeIndex).margin({ top: 20 })
        .onClick(() => {
          this.datePickerModeIndex++
          if(this.datePickerModeIndex >= this.datePickerModeList.length){
            this.datePickerModeIndex = 0
          }
        })
    }.width('100%')
  }
}

datePicker