首页 > 其他 > 详细

时间段的重叠判断

时间:2014-03-20 06:23:06      阅读:459      评论:0      收藏:0      [点我收藏+]

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

如: 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

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

bubuko.com,布布扣

同时满足绿和红则有重叠

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

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$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);

  

时间段的重叠判断,布布扣,bubuko.com

时间段的重叠判断

原文:http://www.cnblogs.com/lovekingly/p/3611810.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!