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 相关文章推荐
javascript 图片裁剪技巧解读
Nov 15 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
Dec 11 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
JS删除字符串中重复字符方法
Mar 09 Javascript
jQuery中remove()方法用法实例
Dec 25 Javascript
JavaScript学习笔记之JS事件对象
Jan 22 Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 Javascript
js在ie下打开对话窗口的方法小结
Oct 24 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
从零开始最小实现react服务器渲染详解
Jan 26 Javascript
Vue分页器实现原理详解
Jun 28 Javascript
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
利用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+MySql编写聊天室
2006/10/09 PHP
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
python中子类调用父类函数的方法示例
2017/08/18 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
python爬取抖音视频的实例分析
2021/01/19 Python
挂职自我鉴定
2014/02/26 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python