js 判断一组日期是否是连续的简单实例
作者:jingxian 时间:2024-04-17 10:41:12
这是群里一朋友问的问题,当时我说判断下 day 是否相邻即可,后来细想,发现完全不对。
问题需求
给定5个相同格式的日期,怎么判断是否是连续5天呢?
我当时第一反应 getDay() 后排序,然后前后对比即可。。
但是细想,完全不对,比如本周一下周二,这样也会误判。
而且不仅仅这样的问题,还要跨月,跨年,闰月等问题。
然后就有了下面的代码。
让时间戳抹平一切吧
为了不纠结这些问题,我想到了时间戳,这货就可以完全忽略上述问题了,只要处理时间戳,最后比较即可。
然后我给了如下代码:
let days = [
'2016-02-28',
'2016-02-29', // 闰月
'2016-03-01', // 跨月
'2016-03-02',
'2016-03-03',
]
// 先排序,然后转时间戳
let _days = days.sort().map((d, i) => {
let dt = new Date(d)
dt.setDate(dt.getDate() + 4 - i) // 处理为相同日期
return +dt
})
// 比较时间戳是否一致
console.log(
_days[0] == _days[1] &&
_days[0] == _days[2] &&
_days[0] == _days[3] &&
_days[0] == _days[4]
)
ok 一切问题都解决掉了,跨年,跨月,闰月也都无所谓了。
通用函数封装
上述代码还是有点缺陷的,因为时分秒没有处理,如果有时分秒,也要先抹去。
let days = [
'2016-02-28 12:00:00',
'2016-02-29 12:00:01', // 闰月
'2016-03-01 12:00:02', // 跨月
'2016-03-02 12:00:03',
'2016-03-03 12:00:04',
'2016-03-04 12:00:04',
]
console.log(continueDays(days))
function continueDays(arr_days) {
// 先排序,然后转时间戳
let days = arr_days.sort().map((d, i) => {
let dt = new Date(d)
dt.setDate(dt.getDate() + 4 - i) // 处理为相同日期
// 抹去 时 分 秒 毫秒
dt.setHours(0)
dt.setMinutes(0)
dt.setSeconds(0)
dt.setMilliseconds(0)
return +dt
})
let ret = true
days.forEach(d => {
if (days[0] !== d) {
ret = false
}
})
return ret
}
这个函数只是改动了2个地方,抹去 时 分 秒 毫秒 和 循环比较,其他都一样。
小结
js 处理时间还是非常简单的,比如写个日期插件,其实借助 Date 非常容易实现,但实现你要了解 Date 的 api 才行。
当然要说简单,还是 php 最简单,那简直逆天。
标签:js,判断,日期,连续
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python基础第三方模块requests openpyxl
2023-09-24 04:31:32
![](https://img.aspxhome.com/file/2023/5/131165_0s.png)
常用python爬虫库介绍与简要说明
2023-01-07 13:09:12
MYSQL Binlog恢复误删数据库详解
2024-01-27 06:17:30
![](https://img.aspxhome.com/file/2023/5/129945_0s.png)
javascript中的正则表达式使用详解
2024-04-08 10:52:55
asp如何对用户进行授权?
2009-11-20 18:46:00
批处理与python代码混合编程的方法
2023-08-26 10:45:32
科讯CMS编辑器会自动更改代码
2008-12-12 13:00:00
![](https://img.aspxhome.com/file/UploadPic/200812/12/kesion-editer-90s.jpg)
python3实现网页版raspberry pi(树莓派)小车控制
2021-05-05 05:35:18
![](https://img.aspxhome.com/file/2023/3/101283_0s.jpg)
Python 带星号(* 或 **)的函数参数详解
2023-04-25 22:36:40
python消除序列的重复值并保持顺序不变的实例
2023-03-13 14:53:49
关于redux-saga中take使用方法详解
2023-08-06 00:54:11
10个杀手级应用的Python自动化脚本
2023-10-06 14:01:53
Linux中安装Python的交互式解释器IPython的教程
2023-09-14 05:50:06
go语言优雅地处理error工具及技巧详解
2023-07-16 18:56:56
Python Matplotlib 基于networkx画关系网络图
2021-04-03 04:49:26
![](https://img.aspxhome.com/file/2023/2/131402_0s.png)
JavaScript中通用的jquery动画滚屏实例
2024-04-22 22:22:34
Mysql如何同时交换两个表的表名详解
2024-01-17 06:47:54
pandas实现一行拆分成多行
2021-09-19 16:22:37
![](https://img.aspxhome.com/file/2023/3/88973_0s.png)
在MySQL字段中使用逗号分隔符的方法分享
2024-01-17 23:34:19
IDEA使用properties配置文件进行mysql数据库连接的教程图解
2024-01-22 13:45:08
![](https://img.aspxhome.com/file/2023/5/118205_0s.png)