鸿蒙应用示例:工作中常用的日期时间处理方法
作者:zhongcx
- 2024-10-12 广东
本文字数:2549 字
阅读完需:约 8 分钟
import { systemDateTime } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
@State formattedTimeNow: string = "";
@State formattedTimeAgo: string = "";
@State timestampSecs: string = "";
@State timestampSecsAlt: string = "";
@State fullDateTime: string = "";
@State nanosecondsTimestamp: string = "";
@State timezoneOffsetHours: string = "";
@State currentDate: string = "";
@State formattedSpecifiedDateTime: string = "";
formatTimeAgo(dateTime: Date): string {
const now = new Date();
const diff = now.getTime() - dateTime.getTime();
const SECONDS = 1000;
const MINUTES = SECONDS * 60;
const HOURS = MINUTES * 60;
const DAYS = HOURS * 24;
if (diff < SECONDS) {
return '刚刚';
} else if (diff < MINUTES) {
return '不到一分钟';
} else if (diff < HOURS) {
return Math.round(diff / MINUTES) + '分钟前';
} else if (diff < DAYS) {
return Math.round(diff / HOURS) + '小时前';
} else if (diff < DAYS * 2) {
return '昨天';
} else if (diff < DAYS * 3) {
return '前天';
} else {
return this.formatDate(dateTime);
}
}
formatDate(dateTime: Date): string {
const year = dateTime.getFullYear();
const month = String(dateTime.getMonth() + 1).padStart(2, '0');
const day = String(dateTime.getDate()).padStart(2, '0');
return `${year}年${month}月${day}日`;
}
getFullDateTime(): string {
const formatter = new Intl.DateTimeFormat('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
return formatter.format(new Date());
}
formatCustomDateTime(dateTime: Date): string {
const formatter = new Intl.DateTimeFormat('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
const parts = formatter.formatToParts(dateTime);
let formattedDate = '';
for (const part of parts) {
switch (part.type) {
case 'month':
formattedDate += `${part.value}月`;
break;
case 'day':
formattedDate += `${part.value}日`;
break;
case 'year':
formattedDate = `${part.value}年${formattedDate}`;
break;
default:
break;
}
}
return formattedDate;
}
getFormattedSpecifiedDateTime(dateTime: Date): string {
return this.formatCustomDateTime(dateTime);
}
getNanosecondsTimestamp(): void {
const time = systemDateTime.getTime(true);
this.nanosecondsTimestamp = time.toString();
}
getTimezoneOffsetHours(): void {
try {
const now = new Date();
const offsetMinutes = now.getTimezoneOffset();
const offsetHours = Math.floor(-offsetMinutes / 60);
this.timezoneOffsetHours = offsetHours.toString();
} catch (error) {
console.error('获取时区偏移量失败:', error);
this.timezoneOffsetHours = '未知';
}
}
getCurrentYearMonthDay(): string {
const date = new Date();
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}年${month}月${day}日`;
}
build() {
Column({ space: 10 }) {
Button('获取当前时间戳(秒)').onClick(() => {
this.timestampSecs = Math.floor(Date.now() / 1000).toString()
this.timestampSecsAlt = Math.floor(new Date().getTime() / 1000).toString()
})
Text(`当前时间戳(秒):${this.timestampSecs}`)
Text(`当前时间戳(秒):${this.timestampSecsAlt}`)
Button('获取当前时间戳(纳秒)').onClick(() => {
this.getNanosecondsTimestamp();
})
Text(`当前时间戳(纳秒):${this.nanosecondsTimestamp}`)
Button('获取时间间隔显示').onClick(() => {
this.formattedTimeNow = this.formatTimeAgo(new Date());
this.formattedTimeAgo = this.formatTimeAgo(new Date('2023-04-01T12:00:00'));
})
Text(`当前时间间隔显示:${this.formattedTimeNow}`)
Text(`指定时间间隔显示:${this.formattedTimeAgo}`)
Button('获取当前时区偏移量').onClick(() => {
this.getTimezoneOffsetHours();
})
Text(`当前时区偏移量:${this.timezoneOffsetHours}小时`)
Button('获取当前年-月-日').onClick(() => {
this.currentDate = this.getCurrentYearMonthDay();
})
Text(`当前年-月-日:${this.currentDate}`)
Button('获取当前完整时间').onClick(() => {
this.fullDateTime = this.getFullDateTime();
})
Text(`当前完整时间:${this.fullDateTime}`)
Button('获取指定日期时间').onClick(() => {
this.formattedSpecifiedDateTime = this.getFormattedSpecifiedDateTime(new Date('2024-10-02T09:30:00'));
})
Text(`指定日期时间:${this.formattedSpecifiedDateTime}`)
}
.width('100%')
.height('100%')
}
}
复制代码
实现了以下功能:
1. 获取当前时间戳(秒级和纳秒级)。
2. 格式化时间差,显示为“刚刚”、“几分钟前”等形式。
3. 获取当前时间的完整格式(年-月-日 时:分:秒)。
4. 获取指定日期的时间格式。
5. 获取当前时区偏移量。
6. 获取当前日期(年-月-日)。
划线
评论
复制
发布于: 刚刚阅读数: 5
zhongcx
关注
还未添加个人签名 2024-09-27 加入
还未添加个人简介
评论