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 相关文章推荐
JQUBAR1.1 jQuery 柱状图插件发布
Nov 28 Javascript
Jquery Ajax请求代码(2)
Jan 07 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
jQuery之ajax删除详解
Feb 27 Javascript
javascript实现仿腾讯游戏选择
May 14 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
laydate.js日期时间选择插件
Jan 04 Javascript
javascript深拷贝的原理与实现方法分析
Apr 10 Javascript
bootstrap是什么_动力节点Java学院整理
Jul 14 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
Jan 25 Javascript
vue基于element的区间选择组件
Sep 07 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
Protoss魔法科技
2020/03/14 星际争霸
用PHP发电子邮件
2006/10/09 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python实现求数列和的方法示例
2018/01/12 Python
pytest中文文档之编写断言
2019/09/12 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
小学生安全保证书
2014/02/01 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
技术入股合作协议书
2016/03/21 职场文书