资讯专栏INFORMATION COLUMN

js校验多段时间不重合

Blackjun / 844人阅读

表单里要提交多段时间,要检验每段时间不能有互相重合的时间段

多段时间原始格式如下(时、分、秒转化为秒,或者时间戳):

var timeArray = [
        {start:"27890",off:"28790"}, 
        {start:"25530",off:"25556"}, 
        {start:"27000",off:"31589"},
        {start:"25550",off:"25560"},
     ]
1、数组比较法 1、将多段时间的开始时间和结束时间分别组成两个数组
var minTimes = []
var maxTimes = []
timeArray.map((v)=>{
 minTimes.push(v.start)  //多段开始时间的数组 minTimes = ["27890", "25530", "27000", "25550"]
})
timeArray.map((v)=>{
 maxTimes.push(v.off)    //多段结束时间的数组 maxTimes = ["28790", "25556", "31589", "25560"]
})
2、将minTimes和maxTimes数组元素分别从大到小排序

相当于时间段从小到大重排

minTimes.sort()  // minTimes =  ["25530", "25550", "27000", "27890"]
maxTimes.sort()  // maxTimes =  ["25556", "25560", "28790", "31589"]
3、比较maxTimes[index]和minTimes[index+1],即看结束时间是否永远比开始时间小

从index=1开始比较,如果maxTimes[index]的值比minTimes[index+1]小,说明时间段不会重合,以此类推比较,如果没有出现maxTimes[index] > minTimes[inex+1]的情况,则没有时间段发生重合,如果存在一次maxTimes[index] > minTimes[inex+1],则时间段重合

2、对象比较法 1、timeArray的每一项按开始时间从小到大排序

保证每段时间的开始时间都比上一段时间开始时间小

var temp
for(var i = 0; i < timeArray.length - 1; i++) { 
    for(var j = i + 1; j < timeArray.length; j++){ 
        if(timeArray[i].start > timeArray[j].start){
             temp = timeArray[i]
             timeArray[i] = timeArray[j]
             timeArray[j] = temp
            }
        }
     }     //timeArray = [
           //              {start: "25530", off: "25556"},
           //              {start: "25550", off: "25560"},
           //              {start: "27000", off: "31589"},
           //              {start: "27890", off: "28790"}
           //             ]
2、前一段的结束时间与后一段的结束时间比较,若后一段的结束时间永远小于前一段的开始时间,则时间算段没有冲突

好处:能知道冲突的时间段是哪几段

for(var i = 0;i
总结

第一种方法是将时间段都拆分了,相当于将多段时间从小到大从新排序,但是没有很严谨的逻辑证明这种方法是正确的,但暂时也想不出这种方法存在错误的反例

第二种方法相当于把时间段按照开始时间从新排序,时间段并没有被拆分,如果时间段不冲突,那么肯定有每一段的前一段结束时间小于当前段的开始时间,反之,如果当,每一段当前段的开始时间都小于前一段的结束时间,则时间段不冲突,是充分必要条件,所以我觉得第二种方法有较严谨的逻辑性,可采用。

以上两种方法的前提是,保证每一段的结束时间都要比开始时间大

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109315.html

相关文章

  • 单页面应用里同时埋放多段百度统计的访问分析代码——实战

    摘要:背景单页面应用使用百度统计需要使用和用来统计每个页面的访问应用里如果同时埋放多段百度统计的访问分析代码又需要使用。但是如果单页面应用里又同时埋放多段百度统计的访问分析代码该如何处理呢引入方式直接呈上代码,注意事项都写在注释里了。 背景 单页面应用使用百度统计需要使用_trackPageview和_setAutoPageview API用来统计每个页面的访问, 应用里如果同时埋放多段百度...

    AdolphLWQ 评论0 收藏0
  • 合理利用浏览器缓存

    摘要:当我们第一次或者打开百度,我们会发现加载的请求响应字段如下由于是第一次或者强制刷新打开的,所以浏览器会忽略缓存,直接向服务器发送请求加载资源,图中画框的那几个字段是与缓存相关的。 合理利用缓存概述:本章主要讨论了两方面的内容。1. 浏览器缓存机制。 2. web实践中如何有效利用这些缓存浏览器缓存机制 作为web开发人员经常遇到的问题之一就是我明明修复并且部署了这个BUG为什么线上有的...

    whatsns 评论0 收藏0
  • 合理利用浏览器缓存

    摘要:当我们第一次或者打开百度,我们会发现加载的请求响应字段如下由于是第一次或者强制刷新打开的,所以浏览器会忽略缓存,直接向服务器发送请求加载资源,图中画框的那几个字段是与缓存相关的。 合理利用缓存概述:本章主要讨论了两方面的内容。1. 浏览器缓存机制。 2. web实践中如何有效利用这些缓存浏览器缓存机制 作为web开发人员经常遇到的问题之一就是我明明修复并且部署了这个BUG为什么线上有的...

    zhichangterry 评论0 收藏0
  • ArcGis for JavaScript SDK

    ArcGis for JavaScript SDK 作者:BLUE日期:2019-07-09 描述:arcgis for js 开发包,基于arcgis for js 3.9 点击【这里】下载SDK 该开发包是基于arcgis for javascript 3.9,是对原始API的一个扩充,原始API正常使用,该SDK仅封装了开发过程中常用的方法,开发包内使用瓦片下载的方式对全国天地图底图进行加...

    maybe_009 评论0 收藏0
  • 通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字、竖向文字绘制,自动换行,保

    摘要:新增的是个强大的功能,估计大家平时都会用到,只是频率不高,偶尔用它合成图片,但是如果不进行封装的话,代码会很乱,所以对常用的画图绘制文字保存功能进行了封装,目前还比较满意,能够快速完成绘图任务,从容应对需求变更,只需进行简单配置即可。 Html5新增的canvas是个强大的功能, 估计大家平时都会用到,只是频率不高,偶尔用它合成图片,但是如果不进行封装的话,代码会很乱,所以对canva...

    source 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<