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分页
Jun 07 Javascript
javascript定时保存表单数据的代码
Mar 17 Javascript
js函数的延迟加载实现代码
Oct 11 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
vue store之状态管理模式的详细介绍
Jun 13 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 Javascript
Vue 的 v-model用法实例
Nov 23 Vue.js
JS中循环遍历数组的四种方式总结
Jan 23 Javascript
使用vue3重构拼图游戏的实现示例
Jan 25 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乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
python批量实现Word文件转换为PDF文件
2018/03/15 Python
python之生产者消费者模型实现详解
2019/07/27 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Django实现文件上传下载
2019/10/06 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
幼儿园运动会口号
2014/06/07 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
商业计划书之服装
2019/09/09 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
创业计划书之网吧
2019/10/10 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python
基于JavaScript实现年月日三级联动
2021/06/22 Javascript