前言
最近在日常鸿蒙开发过程中,经常会使用一些时间选择器,鸿蒙官方提供的时间选择器满足不了需求,所以自己动手自定义一些经常会使用到的时间选择器,希望能帮到你,建议点赞收藏!
实现效果
需求分析
- 默认选中日期为当前时间。
- 支持精确到时分。
- 注意闰年的计算。
技术实现
- 首先要想实现时间选择器,需要使用一个上下可以滚动的控件,这里使用鸿蒙官方提供的 TextPicker,TextPicker 控件支持内容的上下滚动,可以用来显示年月日的选择器,确定了控件后,先计算日期。
new Promise< string[] >(async (resolve: (data: Array< string >) = > void, reject) = > {
let list: Array< string > = []
for (let start = this.currentYear; start <= this.currentYear + 1; start++) {
//月份
for (let i = (start == this.currentYear?this.startMonth:1); i < 13; i++) {
let day: number = 0
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
day = 31
} else if (i == 2) {
//闰年
if (start % 400 == 0 || (start % 4 == 0 && start % 100 > 0)) {
day = 29
}
// //平年
else {
day = 28
}
} else {
day = 30
}
for (let j = ((start == this.currentYear&& i == this.startMonth)?this.startDay:1); j <= day; j++) {
list.push(start + "-" + (i).toString().padStart(2,"0") + "-" + j.toString().padStart(2,"0"))
}
}
}
resolve(list)
}).then((result: Array< string >) = > {
this.timeList = result
})
由于计算日期是比较耗时的操作,这里使用 Pormise 处理日期的计算,特别需要注意闰年的日期计算,这里以 1 年为周期。
- 根据计算得到的日期数据集合,使用 TextPicker 显示年月日,同时默认选中当前时间 choseDay。
TextPicker({ range: this.timeList, value: this.choseDay })
.pickerStyle()
.onChange((value, index) = > {
this.choseDay = value.toString()
})
.width(105)
- 计算时分数据。
for (let i = 0; i < 60; i=i+this.skipMinute) {
this.minuteList.push((i< 10?"0"+i:i).toString().concat(this.isShowUnit?"分":""))
}
for (let i = 0; i < 24; i++) {
this.hourList.push((i< 10?"0"+i:i).toString().concat(this.isShowUnit?"时":""))
}
- 分别使用 TextPicker 显示时分。
TextPicker({
range: this.hourList,
value:this.currentHour+""
}).pickerStyle()
.onChange((value,index)= >{
this.selectHour = value+""
this.onChange(this.selectHour.concat(":"+this.selectMinute))
})
TextPicker({
range: this.minuteList,
value:this.currentMinute+""
}).pickerStyle()
.onChange((value,index)= >{
this.selectMinute = value.toString()
this.onChange(this.selectHour+":"+value)
})
- 要让时间选择器默认选择当前时间时,需要注意选择器的格式为"2012-01-01",需要在计算时不足 10 时补 0。否则时间选择器不会默认选中当前时间。
- 鸿蒙官方的 Date 类默认提供的月份是从 0 开始的,也就是说通过 data.getUTCMoth()获取的月份默认范围为 [0,11],而选择器需要显示的是 [1,12],这里需要手动处理。
总结
自定义时间选择器看似简单,其实需要注意的地方不少,时间的计算,时间的显示格式,默认选中当前时间等。都需要开发者在日常开发中注意计算细节。看到这里相信你已经学会了怎么自定义一个时间选择器了,快去动手试试吧!
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
HarmonyOS
+关注
关注
80文章
2130浏览量
33765
发布评论请先 登录
相关推荐
热点推荐
HarmonyOS实战:3秒实现一个自定义轮播图
那么简单,需要考虑的细节很多。不过在 HarmonyOS 中实现一个轮播图却是十分的简单,本篇文章教你在最短的时间内快速实现一个自定义的 轮播图,建议点赞收藏!
KiCad 中的自定义规则(KiCon 演讲)
“ Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。 ” 演讲主要围绕 加强 KiCad 中的自定义

HarmonyOS实战:高德地图自定义定位图标展示
的问题,建议点赞收藏! 实现效果 需求分析 首先需要实现一个自定义的图标替代系统默认的箭头。 获取定位权限与位置信息。 获取定位结果并展示当前位置。 技术实现 在鸿蒙的实际开发过程中,地图定位权限首先需要申请两个权限,

HarmonyOS应用自定义键盘解决方案
自定义键盘是一种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
如何添加自定义单板
在开发过程中,用户有时需要创建自定义板配置。本节将通过一个实例讲解用户如何创建属于自己的machine,下面以g2l-test.conf为例进行说明。
如何快速创建用户自定义Board和App工程
概述自HPM_SDKv1.7.0发布开始,在HPM_ENV中新增了user_template文件夹,以方便用户快速创建自定义的Board和App工程。user_template是用户模板工程,用户

think-cell:自定义think-cell(四)
C.5 设置默认议程幻灯片布局 think-cell 议程可以在演示文稿中使用特定的自定义布局来定义议程、位置和议程幻灯片上的其他形状,例如标题或图片。通过将此自定义布局添加到模板,您可以为整个组织

智能语音识别照明解决方案,平台自定义,中英切换
智能语音识别照明方案引入NRK3502芯片,支持平台自定义,离线控制,中英双语切换。NRK3502具备高性能和灵活自定义能力,可推动智能照明革新,控制其他智能设备,为国际用户提供全方位智能生活体验。

think-cell;自定义think-cell(一)
本章介绍如何自定义 think-cell,即如何更改默认颜色和其他默认属性;这是通过 think-cell 的样式文件完成的,这些文件将在前四个部分中进行讨论。 第五部分 C.5 设置默认议程幻灯片

如何将自定义逻辑从FPGA/CPLD迁移到C2000™微控制器
电子发烧友网站提供《如何将自定义逻辑从FPGA/CPLD迁移到C2000™微控制器.pdf》资料免费下载
发表于 09-23 12:36
•0次下载

如何自定义内存控制器的设置
在FreeRTOS中自定义内存控制器的设置,主要涉及到内存分配策略的选择和配置。FreeRTOS提供了多种内存分配策略,如heap_1、heap_2、heap_3、heap_4和heap_5,每种
评论