0. 前言
在日常的开发过程中,日期操作是非常常见,也是经常遇到的需求。在JS中,日期操作也有很多种方式。本篇文章将简单介绍一下常见的几种时间处理的方式,扩展包。并从一个简单的实际应用场景来分别看下,不同的实现方式。
1. 常见方式
1.1 Date对象
Date对象是js自带的处理时间的方法,处理的时间是基于 1970年1月1日UTC零点 (UTC,世界标准时间,挖个坑,以后可以具体讲讲几种时间标准)
使用Date对象来处理时间的好处是不用安装额外的依赖包,但是因为没有一些常用方法的封装,使用上对相对比较麻烦,不是很方便。
要注意的是,使用时要留意
Date对象的方法浏览器的支持情况,不同的方法支持情况不同
1.2 MomentJS
MomentJS是非常受欢迎的日期处理包之一。几乎可以完成所有涉及到日期操作的需求,格式化,日期处理,展示等等。而且使用上也非常方便。但是缺点就是,包的大小很大。但是在新版本也做了一些优化,一些不常用的方法作为插件扩展按需进行使用。不带国际化的核心min.js文件18k左右,带国际化的核心min.js文件在73k左右
1.3 DayJS
DayJS和MomentJS一样,也是非常受欢迎的日期处理包,我们前面提到,MomentJS的一个弊端就是包大小很大,DayJS就是替代MomentJS的一个轻量化解决方案。项目开发时如果被要求优化项目大小或者页面加载速度,如果发现项目中使用的是MomentJS,我们可以尝试替换成DayJS来进行优化。
2. 获取当前星期的日期范围
以上介绍了,JS中处理日期、时间的三种方式,大家都可以在文档中找到所有的API,一个个讲API或者文档,我认为是没有太大的意义的。我们用一个例子作为抓手,实际来看看他们的使用方式。
需求: 输出当前日期所在星期的日期列表(星期日为第一天),返回格式为数组,数组中元素格式为
YYYY-MM-DD,如图
2.1 Date对象
let current = new Date();
let startDate = current.getDate() - current.getDay();
let res = [];
for(let i = 0;i < 7;i++) {
let date = new Date(current.setDate(startDate + i))
let day = date.getDate();
let month = date.getMonth() + 1;
let year = date.getFullYear();
res.push(`${year}-${month.toString().padStart(2,'0')}-${day.toString().padStart(2,'0')}`)
}
console.log(res)
// 结果:['2023-06-04', '2023-06-05', '2023-06-06', '2023-06-07', '2023-06-08', '2023-06-09', '2023-06-10']
代码思路是,先获取当前是星期几,然后根据加减天数来得到当前星期的日期,最后格式化添加到结果中。可以看到Date对象处理格式化的时候还是比较费劲的。当然也有其他的思路比如计算秒数加减之类的,大家也可以在评论区畅所欲言。
2.2 MomentJS
let startDate = moment().startOf('week');
let res = [];
for(let i = 0;i < 7;i++) {
res.push(startDate.format('YYYY-MM-DD'));
startDate.add(1, 'days');
}
console.log(res)
// 结果:['2023-06-04', '2023-06-05', '2023-06-06', '2023-06-07', '2023-06-08', '2023-06-09', '2023-06-10']
可以看到MomentJS获取日期和格式化日期就方便很多,内置了方法可以直接用,代码也精简很多。
2.3 DayJS
let startDate = dayjs().startOf("week");
let res = [];
for (let i = 0; i < 7; i++) {
res.push(startDate.format("YYYY-MM-DD"));
startDate = startDate.add(1, "day");
}
console.log(res);
// 结果:['2023-06-04', '2023-06-05', '2023-06-06', '2023-06-07', '2023-06-08', '2023-06-09', '2023-06-10']
可以看到DayJS和代码和MomentJS的代码几乎一模一样,除了一些细微的差异,比如:
* 初始化日期对象是dayjs,而不是moment
* add方法添加天数用的是day,而不是days
* momentjs 添加天数之后,是在原对象上进行修改,而dayjs不会修改原来的值
3. 总结
我们本篇简单介绍了一下JS中处理日期时间的三种方式,分别是:Date, MomentJS, DayJS。每一种方式都可以实现我们日期操作的一些需求。在日常的开发过程中,可以根据实际情况进行选择