鸿蒙(HarmonyOS)DatePicker+TimePicker时间选择控件

一、操作环境

操作系统:  Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0(API 9)

二、效果图

       

可实现两种选择方式,可带时分选择,也可不带,使用更加方便。

三、代码

SelectedDateDialog.ets文件
/**
 * 时间选择
 */
@CustomDialog
export struct SelectedDateDialog {
  private selectedDate: Date
  private isShowTime: Visibility = Visibility.Hidden //是否展示时分栏
  private callback: (value: Date) => void
  controller: CustomDialogController //自定义dialog必须声明

  aboutToAppear() {
    console.log("时间选择展示:" + JSON.stringify(this.selectedDate))
  }

  build() {
    Column() {
      Row() {
        DatePicker({
          start: new Date('2000-1-1'), //起始时间
          end: new Date('2050-1-1'), //结束时间
          selected: this.selectedDate //默认所选时间
        })
          .width(this.isShowTime == Visibility.Visible ? '60%' : '100%') //不显示时分,则宽为100
          .height('100%')
          .lunar(false) //日期是否显示农历。 - true:展示农历。 - false:不展示农历。 默认值:false
          .onChange(value => {
            // console.log("轮换结果:" + JSON.stringify(value))
            this.selectedDate.setFullYear(value.year, value.month, value.day)
          })

        TimePicker({ selected: this.selectedDate })
          .width('35%')
          .height('100%')
          .visibility(this.isShowTime)
          .useMilitaryTime(true) //24小时制
          .onChange(value => {
            // console.info('select current date is: ' + JSON.stringify(value))
            if (value.hour >= 0) {
              this.selectedDate.setHours(value.hour, value.minute)
            }
          })
      }.width('100%')
      .height('80%')

      Blank()

      Button('确定').borderRadius('3').width('40%')
        .margin({ bottom: 20 })
        .onClick((event: ClickEvent) => {
          console.log('选择时间:' + JSON.stringify(this.selectedDate))
          this.callback?.(this.selectedDate)
          this.controller.close()
        })
    }
    .width('100%')
    .height('50%')
  }
}

使用其中的参数isShowTime控制是否显示时分栏的选择,Visibility.Visible为显示,Visibility.Hidden不显示

在page中的调用方式:

 @State selectInspectionTime: Date = new Date()
 selectInspectionDialog: CustomDialogController

initSelectInspectionDialog() {
    this.selectInspectionDialog = new CustomDialogController({
      builder: SelectedDateDialog({ 
        selectedDate: this.selectInspectionTime, 
        isShowTime: Visibility.Visible,
        callback: (value) => {
          let time = value.getFullYear() + "-" + (value.getMonth() + 1) + "-" + value.getDate()
          + "T" + value.getHours() + ":" + value.getMinutes() //月份从0开始,故需+1
        } }),
      cancel: this.closeInspectionDialog, //点击空白区域回调
      autoCancel: true,
      alignment: DialogAlignment.Bottom,
      offset: { dx: 0, dy: -20 },
      gridCount: 4,
      customStyle: false
    })
  }


closeInspectionDialog() {
    console.info('Click the callback in the blank area')
    this.selectInspectionDialog.close()
  }

openDialog() {
    //点击事件调用打开dialog
    this.selectInspectionDialog.open()
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值