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 相关文章推荐
css把超出的部分显示为省略号的方法兼容火狐
Jul 23 Javascript
关于flash遮盖div浮动层的解决方法
Jul 17 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
Sep 01 Javascript
通过扫描二维码打开app的实现代码
Nov 10 Javascript
angular 用拦截器统一处理http请求和响应的方法
Jun 08 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
layui 弹出层值回传解决方式
Nov 14 Javascript
详解JavaScript 事件流
Sep 02 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
Jun 21 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 加密与解密的斗争
2009/04/17 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
PHP实现添加购物车功能
2017/03/06 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
Javascript & DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
js重写方法的简单实现
2016/07/10 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中实现三目运算的方法
2015/06/21 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
详解python的四种内置数据结构
2019/03/19 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
浅谈Python 参数与变量
2020/06/20 Python
python简单实现插入排序实例代码
2020/12/16 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
服装设计专业毕业生求职信
2014/04/09 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
运动会方阵口号
2014/06/07 职场文书
会计个人实习计划书
2014/08/15 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
客房领班岗位职责
2015/02/11 职场文书
质检员岗位职责范本
2015/04/07 职场文书