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实现动态CSS换肤技术的脚本
Jun 29 Javascript
IE 上下滚动展示模仿Marquee机制
Dec 20 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
Dec 11 Javascript
通过javascript获取iframe里的值示例代码
Jun 24 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
Dec 18 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
js获取新浪天气接口的实现代码
Jun 06 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 Javascript
微信小程序网络请求wx.request详解及实例
May 18 Javascript
详解vue开发中调用微信jssdk的问题
Apr 16 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
Feb 09 Javascript
手写实现JS中的new
Nov 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
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
PHP 危险函数全解析
2009/09/09 PHP
php中apc缓存使用示例
2013/12/25 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
Mac下安装vue
2018/04/11 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python 元组操作总结
2019/09/18 Python
python如何将两个txt文件内容合并
2019/10/18 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
如何将json数据转换为python数据
2020/09/04 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
JSP&Servlet技术面试题
2015/05/21 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
刑事撤诉申请书
2015/05/18 职场文书
四大名著读书笔记
2015/06/25 职场文书
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL