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 去掉字符串中的空格(实现代码)
Nov 19 Javascript
jquery操作checked属性以及disabled属性的多种方法
Jun 20 Javascript
javascript 构造函数方式定义对象
Jan 02 Javascript
常用的JavaScript模板引擎介绍
Feb 28 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
Oct 27 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
Apr 05 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
浅谈vue 锚点指令v-anchor的使用
Nov 13 Javascript
js仿淘宝放大镜效果
Dec 28 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编写的导航条程序
2006/10/09 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
Json解析的方法小结
2016/06/22 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
遗传算法之Python实现代码
2017/10/10 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
python初步实现word2vec操作
2020/06/09 Python
浅谈python 类方法/静态方法
2020/09/18 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
《学会待客》教学反思
2014/02/22 职场文书
争做文明公民倡议书
2014/08/29 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
python实现学生信息管理系统(面向对象)
2022/06/05 Python
Python实现数据的序列化操作详解
2022/07/07 Python