js 判断一组日期是否是连续的简单实例
这是群里一朋友问的问题,当时我说判断下day是否相邻即可,后来细想,发现完全不对。
问题需求
给定5个相同格式的日期,怎么判断是否是连续5天呢?
我当时第一反应getDay()后排序,然后前后对比即可。。
但是细想,完全不对,比如本周一下周二,这样也会误判。
而且不仅仅这样的问题,还要跨月,跨年,闰月等问题。
然后就有了下面的代码。
让时间戳抹平一切吧
为了不纠结这些问题,我想到了时间戳,这货就可以完全忽略上述问题了,只要处理时间戳,最后比较即可。
然后我给了如下代码:
letdays=[
'2016-02-28',
'2016-02-29',//闰月
'2016-03-01',//跨月
'2016-03-02',
'2016-03-03',
]
//先排序,然后转时间戳
let_days=days.sort().map((d,i)=>{
letdt=newDate(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一切问题都解决掉了,跨年,跨月,闰月也都无所谓了。
通用函数封装
上述代码还是有点缺陷的,因为时分秒没有处理,如果有时分秒,也要先抹去。
letdays=[
'2016-02-2812:00:00',
'2016-02-2912:00:01',//闰月
'2016-03-0112:00:02',//跨月
'2016-03-0212:00:03',
'2016-03-0312:00:04',
'2016-03-0412:00:04',
]
console.log(continueDays(days))
functioncontinueDays(arr_days){
//先排序,然后转时间戳
letdays=arr_days.sort().map((d,i)=>{
letdt=newDate(d)
dt.setDate(dt.getDate()+4-i)//处理为相同日期
//抹去时分秒毫秒
dt.setHours(0)
dt.setMinutes(0)
dt.setSeconds(0)
dt.setMilliseconds(0)
return+dt
})
letret=true
days.forEach(d=>{
if(days[0]!==d){
ret=false
}
})
returnret
}
这个函数只是改动了2个地方,抹去时分秒毫秒和循环比较,其他都一样。
小结
js处理时间还是非常简单的,比如写个日期插件,其实借助Date非常容易实现,但实现你要了解Date的api才行。
当然要说简单,还是php最简单,那简直逆天。
以上这篇js判断一组日期是否是连续的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。