网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

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

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/16 4:21:59