前端利器:DateUtils 日期时间工具深度剖析
序言
在前端开发中,日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算,每一个环节都需要精确和高效的代码支持。今天,我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils
,它涵盖了从基础的日期格式化到高级的日期范围计算等一系列实用功能。
一、工具类概述
DateUtils
是一个功能丰富的日期时间工具集合,它为开发者提供了便捷的方式来处理各种日期和时间相关的操作。该工具类依赖于一个辅助工具 TypeUtils
中的 isDate
方法来进行日期对象的有效性验证。通过枚举定义了多种常见的日期格式,并且提供了一系列方法来实现日期的格式化、解析、相对时间获取、日期范围计算、日期加减、差值计算等功能。
二、核心功能解析
(一)日期格式化
- FORMAT 枚举
DateUtils
首先定义了一个FORMAT
枚举,它包含了多种常用的日期格式,如DATE
(YYYY - MM - DD
)、TIME
(HH:mm:ss
)、DATETIME
(YYYY - MM - DD HH:mm:ss
)等,涵盖了中文和英文的常见格式,方便开发者在不同场景下选择合适的格式。 - format 方法
format(date: Date, format: string = this.FORMAT.DATETIME): string {
if (!TypeUtils.isDate(date)) {
throw new Error("无效的日期对象!");
}
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hours = date.getHours();
const minutes = date.getMinutes();
const seconds = date.getSeconds();
return format
.replace("YYYY", year.toString())
.replace("MM", month.toString().padStart(2, "0"))
.replace("DD", day.toString().padStart(2, "0"))
.replace("HH", hours.toString().padStart(2, "0"))
.replace("mm", minutes.toString().padStart(2, "0"))
.replace("ss", seconds.toString().padStart(2, "0"));
}
该方法接收一个 Date
对象和一个可选的格式字符串作为参数。如果未传入格式字符串,则默认使用 DATETIME
格式。首先通过 TypeUtils.isDate
方法验证日期对象的有效性,然后从 Date
对象中提取年、月、日、时、分、秒等信息,最后通过字符串替换的方式将占位符替换为实际的日期时间值,实现日期的格式化。
(二)日期解析
parse
方法用于将日期字符串解析为 Date
对象。
parse(dateStr: string): Date {
const date = new Date(dateStr);
if (isNaN(date.getTime())) {
throw new Error("无效的日期字符串!");
}
return date;
}
该方法尝试使用 Date
构造函数将传入的字符串解析为日期对象。如果解析后的日期对象的 getTime
方法返回 NaN
,则说明解析失败,抛出“无效的日期字符串!”错误。
(三)相对时间获取
getRelativeTime
方法用于获取相对于当前时间的日期描述。
getRelativeTime(date: Date): string {
const now = new Date();
const diff = now.getTime() - date.getTime();
const minutes = Math.floor(