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 相关文章推荐
JS event使用方法详解
Apr 28 Javascript
Js基础学习资料
Nov 23 Javascript
一个轻量级的javascript库 pj介绍
Dec 19 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
js判断浏览器类型的方法
Aug 07 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
Jun 06 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
Sep 02 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
Apr 19 Javascript
用Node写一条配置环境的指令
Nov 14 Javascript
基于ts的动态接口数据配置的详解
Dec 18 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 curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
简单的js表格操作
2016/09/24 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
老生常谈Python序列化和反序列化
2017/06/28 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
What is EJB
2016/07/22 面试题
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
党员批评与自我批评
2014/02/12 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
高中班主任寄语
2019/06/21 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书