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代码优化 遍历篇
Nov 01 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
动态加载script文件的两种方法
Aug 15 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
Mar 13 Javascript
Vue组件创建和传值的方法
Aug 17 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
Oct 26 Javascript
使用JS判断页面是首次被加载还是刷新
May 26 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
Feb 02 Javascript
JS数组的常用10种方法详解
May 08 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
基于datagrid框架的查询
2013/04/08 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
Python中的下划线详解
2015/06/24 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
餐厅总厨求职信
2014/03/04 职场文书
大专生求职信
2014/06/29 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书