js 判断一组日期是否是连续的简单实例


Posted in Javascript onJuly 11, 2016

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

Javascript 相关文章推荐
location.href语句与火狐不兼容的问题
Jul 04 Javascript
JQuery 在线引用及测试引用是否成功
Jun 24 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
Aug 21 Javascript
轻松实现JavaScript图片切换
Jan 12 Javascript
jQuery遮罩层效果实例分析
Jan 14 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
Sep 23 Javascript
原生JavaScript制作计算器
Oct 16 Javascript
使用 jQuery 实现表单验证功能
Jul 05 jQuery
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 Javascript
如何使JavaScript休眠或等待
Apr 27 Javascript
利用css+原生js制作简单的钟表
Apr 07 #Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 #Javascript
深入解析Javascript闭包的功能及实现方法
Jul 10 #Javascript
js重写方法的简单实现
Jul 10 #Javascript
JS实现控制文本框的内容
Jul 10 #Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 #Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 #Javascript
You might like
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
js 字符串操作函数
2009/07/25 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
jquery提示 "object expected"的解决方法
2009/12/13 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
javascript整除实现代码
2010/11/23 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
Python实现的批量下载RFC文档
2015/03/10 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
基于Python fminunc 的替代方法
2020/02/29 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
python下载的库包存放路径
2020/07/27 Python
python中random模块详解
2021/03/01 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
法制报告会主持词
2014/04/02 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
优质服务活动实施方案
2014/05/02 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
绿色小区申报材料
2014/08/22 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
小学教代会开幕词
2016/03/04 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书