zoukankan      html  css  js  c++  java
  • 时间段的重叠判断

    个时间段判断是否重叠比较常见,

    如: startdate1 -- enddate1

        startdate2 -- enddate2

    当然前提是保证开始时间早于结束时间,什么你问如果不是?那你就自己处理一下保证开始时间早于结束时间.

    可能首先想到的是

    (startdate2 between startdate1 and enddate1)
    or (enddate2 between startdate1 and enddate1)
    or(startdate1 between startdate2 and enddate2 )
    or(enddate1 between startdate2 and enddate2)

    以此类推,多段也貌似能够判断,但是否能完全覆盖到呢?有兴趣可以自己验证一下.
    但是个人感觉有点麻烦,在此介绍一个简单的方法.如果你发现此方法有问题欢迎一起讨论.

    假设要加入的时间段为 as1  ae1

    已存在的所有时间段为  xs1  xe1

    xe1>as1 and xs1<ae1

    满足有重叠,不满足无重叠

    同时满足绿和红则有重叠

    绿线:已存在的所有结束时间大于要添加的开始时间

    红线:已存在的所有开始时间都小于要添加的结束时间

    $xs1 = 1; 
    $xe1 = 7; 
    
    $data = array( 
    array(-7, 0),
    array(-1, 2), 
    array(2, 4), 
    array(5, 10), 
    array(-2, 11), 
    array(8, 11), 
    ); 
    
    $newdata = array(); 
    
    foreach($data as $row){ 
    $as1 = $row[0]; 
    $ae1 = $row[1]; 
    
    if($xe1 >= $as1 && $xs1 <= $ae1){ 
    array_push($newdata, $row); 
    } 
    } 
    
    echo (count($newdata)); 
    
    print_r($newdata);
    

      

  • 相关阅读:
    monaco editor
    javascript for of 和 for in 在数组和对象中的区别
    django rest 版本控制器
    学习
    day 22
    day 21
    day20
    day21 数据处理自我小结
    day20 【手写数字识别】之数据处理(搬运)
    day19 通过极简方案快速构建手写数字识别模型 (百度飞浆搬运)
  • 原文地址:https://www.cnblogs.com/lovekingly/p/3611810.html
Copyright © 2011-2022 走看看