手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >js 判断一组日期是否是连续的简单实例
js 判断一组日期是否是连续的简单实例
摘要:这是群里一朋友问的问题,当时我说判断下day是否相邻即可,后来细想,发现完全不对。问题需求给定5个相同格式的日期,怎么判断是否是连续5天呢?...

这是群里一朋友问的问题,当时我说判断下 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 判断一组日期是否是连续的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持查字典教程网。

【js 判断一组日期是否是连续的简单实例】相关文章:

jquery实现的判断倒计时是否结束代码

jQuery实现的多屏图像图层切换效果实例

判断是否输入完毕再激活提交按钮

快速判断某个值是否在select中的方法

js去字符串前后空格的实现方法

js实现顶部可折叠的菜单工具栏效果实例

javascript检测两个数组是否相似

javascript中FOREACH数组方法使用示例

js判断鼠标位置是否在某个div中的方法

jQuery插件制作之全局函数用法实例

精品推荐
分类导航