js 判断一组日期是否是连续的简单实例

这是群里一朋友问的问题,当时我说判断下 day 是否相邻即可,后来细想,发现完全不对。

问题需求

给定5个相同格式的日期,怎么判断是否是连续5天呢?

我当时第一反应 getDay() 后排序,然后前后对比即可。。

但是细想,完全不对,比如本周一下周二,这样也会误判。

而且不仅仅这样的问题,还要跨月,跨年,闰月等问题。

然后就有了下面的代码

让时间戳抹平一切吧

为了不纠结这些问题,我想到了时间戳,这货就可以完全忽略上述问题了,只要处理时间戳,最后比较即可。

然后我给了如下代码:

// 先排序,然后转时间戳
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 一切问题都解决掉了,跨年,跨月,闰月也都无所谓了。

通用函数封装

上述代码还是有点缺陷的,因为时分秒没有处理,如果有时分秒,也要先抹去。

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 判断一组日期是否是连续的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...