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 delegate与live浅析
Dec 21 Javascript
jQuery中[attribute]选择器用法实例
Dec 31 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
Jul 05 Javascript
JS获取和修改元素样式的实例代码
Aug 06 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
Nov 25 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
js实现二级菜单点击显示当前内容效果
Apr 28 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
May 23 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
Nov 13 Javascript
Vue插件从封装到发布的完整步骤记录
Feb 28 Javascript
Node.js Event Loop各阶段讲解
Mar 08 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
Jul 29 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+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
javascript 数组的方法集合
2008/06/05 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
类的核心特性有哪些
2014/01/01 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
酒店总经理欢迎词
2014/01/15 职场文书
仓管员岗位责任制
2014/02/19 职场文书
书香校园活动方案
2014/02/28 职场文书
赔偿协议书范本
2014/04/15 职场文书
大学迎新标语
2014/06/26 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
课外活动总结
2015/02/04 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
话题作文之成长
2019/12/09 职场文书