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 相关文章推荐
jQuery获取节点和子节点文本的方法
Jul 22 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
Jul 29 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
简单的vue-resourse获取json并应用到模板示例
Feb 10 Javascript
小程序实现单选多选功能
Nov 04 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
vue实现日历备忘录功能
Sep 24 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
Aug 27 Javascript
vue实现把接口单独存放在一个文件方式
Aug 13 Javascript
工作中常用js功能汇总
Nov 07 Javascript
vue中的可拖拽宽度div的实现示例
Apr 08 Vue.js
利用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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
Python的迭代器和生成器使用实例
2015/01/14 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
django orm模块中的 is_delete用法
2020/05/20 Python
利用python绘制正态分布曲线
2021/01/04 Python
什么是接口(Interface)?
2013/02/01 面试题
生产车间主管岗位职责
2013/12/28 职场文书
会计学毕业生求职信
2014/06/25 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
给客户的感谢信
2015/01/21 职场文书
处罚决定书范文
2015/06/24 职场文书
子女赡养老人协议书
2016/03/23 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python