时间:2021-05-26
这是群里一朋友问的问题,当时我说判断下 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 判断一组日期是否是连续的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
用js获取一组日期(并把当天算入)中连续的天数,具体内容如下首先得有一组日期,比如:vararr=['2016/02/28','2016/02/29','201
JS判断日期格式是否合法的简单实例如下://函数名:CheckDateTime//功能介绍:检查是否为日期时间functionCheckDateTime(s
假如有一组数组,如[1,2,3,4,5,6],可以看出这数组是连续的,那么如[1,2,3,5,6],这串数组就不是连续的了,用js写判断方法如下: fun
本文实例讲述了js对象基础用法。分享给大家供大家参考。具体分析如下:js对象在本质上与数组相同,都是存放一组数据。但创建方法有所不同,对象需要添加属性。这里简单
本文实例为大家分享了一组典型数据格式转换的python实现代码,供大家参考,具体内容如下有一组源数据,第一行会是个日期数据,第二行标明字段,再接下来是两行数据行