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 相关文章推荐
gridpanel动态加载数据的实例代码
Jul 18 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
Aug 13 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
js预加载图片方法汇总
Jun 15 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
JS组件Bootstrap Select2使用方法详解
Apr 17 Javascript
JavaScript常用数组算法小结
Feb 13 Javascript
浅析如何利用angular结合translate为项目实现国际化
Dec 08 Javascript
JavaScript 实现 Tab 点击切换实例代码
Mar 25 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
jQuery Datatables表头不对齐的解决办法
Nov 27 jQuery
js canvas实现俄罗斯方块
Oct 11 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
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
django2 快速安装指南分享
2018/01/05 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
行政文员岗位职责
2013/11/08 职场文书
研发工程师的岗位职责
2013/11/18 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
2014年教研员工作总结
2014/12/23 职场文书
锅炉工岗位职责
2015/02/13 职场文书
明确岗位职责
2015/02/14 职场文书
教师培训简讯
2015/07/20 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis