js 判断一组日期是否是连续的简单实例
来源: 阅读:1629 次 日期:2016-07-28 16:25:13
温馨提示: 小编为您整理了“js 判断一组日期是否是连续的简单实例”,方便广大网友查阅!

下面小编就为大家带来一篇js 判断一组日期是否是连续的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。

问题需求

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

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map