鸿蒙实现年月日十分选择框,支持年月日、月日、日、年月日时分、时分切换
2023-12-19 21:47:49
import DateTimeUtils from './DateTimeUtils';
@CustomDialog
export default struct RQPickerDialog {
controller: CustomDialogController
title: string = '这是标题'
TAG: string = 'RQPickerDialog'
// 0 - 日期类型(年月日) 1 - 时间类型(时分) 2 - 日期+时间类型 3 - 日期类型2(月日) 4-日期类型3(日)
@State type: string = '4'
private dateFormat: string = 'yyyy-MM-dd HH:mm'
monthList: string[] = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
arr: number[] = [1, 3, 5, 7, 8, 10, 12] // 含有31天的月份
@State dayList: string[] = []
minimumDate: Date = new Date()
maximumDate: Date = new Date()
currentDate: Date = new Date()
selectedTime: Date = new Date()
@State @Watch('monthChange') selectedMonth: number = 0;
selectedDay: number = 0;
monthChange() {
let year = this.currentDate.getFullYear()
let dayOfMonth = this.arr.some(v => v === (this.selectedMonth + 1)) ? 31 : ((this.selectedMonth + 1) === 2 ? ((year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)) ? 29 : 28) : 30)
console.log(this.TAG, year + "-" + this.selectedMonth + "----有多少天 " + dayOfMonth)
this.dayList = []
for (let i = 0; i < dayOfMonth; i++) {
this.dayList.push((i + 1) + "日")
}
console.log(this.TAG, this.dayList.join(','))
}
aboutToAppear() {
this.minimumDate = new Date('1999-1-1 00:00');
this.maximumDate = new Date('2124-1-1 00:00');
this.currentDate = new Date('2016-2-27 10:00');
this.selectedTime = this.currentDate;
//月份本来就是从0开始的
this.selectedMonth = this.currentDate.getMonth()
this.selectedDay = this.currentDate.getDate() - 1
console.log(this.TAG, this.selectedMonth + "----" + this.selectedDay)
}
build() {
Column() {
Text(this.title + this.type)
.fontSize(25)
.textAlign(TextAlign.Center)
.margin({ top: 10, bottom: 10 });
Row() {
if (this.type == '0') {
DatePicker({
start: new Date(this.minimumDate),
end: new Date(this.maximumDate),
selected: this.currentDate,
}).lunar(false)
.onChange((value: DatePickerResult) => {
this.currentDate.setFullYear(value.year, value.month, value.day)
console.info('select current date is: ' + JSON.stringify(value))
}).width('100%')
} else if (this.type == '1') {
TimePicker({ selected: this.selectedTime })
.useMilitaryTime(true)
.onChange((date: TimePickerResult) => {
this.currentDate.setHours(date.hour, date.minute)
console.info('select current date is: ' + JSON.stringify(date))
}).width('100%')
} else if (this.type == '2') {
DatePicker({
start: new Date(this.minimumDate),
end: new Date(this.maximumDate),
selected: this.currentDate,
}).lunar(false)
.onChange((value: DatePickerResult) => {
this.currentDate.setFullYear(value.year, value.month, value.day)
console.info('select current date is: ' + JSON.stringify(value))
}).width('66%')
TimePicker({ selected: this.selectedTime })
.useMilitaryTime(true)
.onChange((date: TimePickerResult) => {
this.currentDate.setHours(date.hour, date.minute)
console.info('select current date is: ' + JSON.stringify(date))
}).width('34%')
} else if (this.type == '3') { //月日
TextPicker({ range: this.monthList, selected: this.selectedMonth })
.onChange((value: string, index: number) => {
this.selectedMonth = index
let month = ~~value.substring(0, value.length - 1)
this.currentDate.setMonth(month - 1)
console.info(this.TAG, 'month value is ' + value + "==" + month)
}).width('50%')
TextPicker({ range: this.dayList, selected: this.selectedDay })
.onChange((value: string, index: number) => {
this.selectedDay = index
let day = ~~value.substring(0, value.length - 1)
this.currentDate.setDate(day)
console.info(this.TAG, 'day value is ' + value + "==" + day)
}).width('50%')
} else if (this.type == '4') { //日
TextPicker({ range: this.dayList, selected: this.selectedDay })
.onChange((value: string, index: number) => {
this.selectedDay = index
let day = ~~value.substring(0, value.length - 1)
this.currentDate.setDate(day)
console.info(this.TAG, 'day value is ' + value)
}).width('100%')
} else {
DatePicker({
start: new Date(this.minimumDate),
end: new Date(this.maximumDate),
selected: this.currentDate,
}).lunar(false)
.onChange((value: DatePickerResult) => {
this.currentDate.setFullYear(value.year, value.month, value.day)
console.info('select current date is: ' + JSON.stringify(value))
}).width('100%')
}
}
Flex({ justifyContent: FlexAlign.SpaceAround, alignItems: ItemAlign.Center }) {
Button('取消', { type: ButtonType.Normal })
.onClick(() => {
// this.that.sendDialogEventToJsApi(this.dialogId, "cancel", { ok: false,
// dismissByClickBg: false,
// inputContent: '' })
// this.that.closeH5Dialog(this.dialogId)
this.controller.close()
})
.backgroundColor(0xffffff)
.fontColor(Color.Black)
.layoutWeight(1)
.height('100%')
Divider()
.vertical(true)
.strokeWidth(1)
.color('#F1F3F5')
.opacity(1)
.height('100%')
Button('确认', { type: ButtonType.Normal })
.onClick(() => {
this.controller.close()
var formatResult = DateTimeUtils.dateFormat(this.currentDate, this.dateFormat)
console.info(this.TAG, "select current date is: " + formatResult)
})
.backgroundColor(0xffffff)
.fontColor(Color.Blue)
.layoutWeight(1)
.height('100%')
}.height(50)
}
}
}
日期格式化工具
/*
timestamp: 13位时间戳 | new Date() | Date()
console.log(dateFormat(1714528800000, 'YY-MM-DD HH:mm:ss'))
format => YY:年,M:月,D:日,H:时,m:分钟,s:秒,SSS:毫秒
*/
export default class DateTimeUtils {
static fixedTwo(value: number): string {
return value < 10 ? '0' + value : String(value)
}
static dateFormat(timestamp: number | string | Date, format = 'yyyy-MM-dd HH:mm:ss'): string {
var date = new Date(timestamp)
var showTime = format
if (showTime.includes('SSS')) {
const S = date.getMilliseconds()
showTime = showTime.replace('SSS', '0'.repeat(3 - String(S).length) + S)
}
if (showTime.includes('yy')) {
const Y = date.getFullYear()
showTime = showTime.includes('yyyy') ? showTime.replace('yyyy', String(Y)) : showTime.replace('yy', String(Y)
.slice(2, 4))
}
if (showTime.includes('M')) {
const M = date.getMonth() + 1
showTime = showTime.includes('MM') ? showTime.replace('MM', this.fixedTwo(M)) : showTime.replace('M', String(M))
}
if (showTime.includes('d')) {
const D = date.getDate()
showTime = showTime.includes('dd') ? showTime.replace('dd', this.fixedTwo(D)) : showTime.replace('d', String(D))
}
if (showTime.includes('H')) {
const H = date.getHours()
showTime = showTime.includes('HH') ? showTime.replace('HH', this.fixedTwo(H)) : showTime.replace('H', String(H))
}
if (showTime.includes('m')) {
var m = date.getMinutes()
showTime = showTime.includes('mm') ? showTime.replace('mm', this.fixedTwo(m)) : showTime.replace('m', String(m))
}
if (showTime.includes('s')) {
var s = date.getSeconds()
showTime = showTime.includes('ss') ? showTime.replace('ss', this.fixedTwo(s)) : showTime.replace('s', String(s))
}
return showTime
}
}
文章来源:https://blog.csdn.net/hasayaqimomo/article/details/135090628
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!