二个时间段重叠的判断逻辑

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/houx/article/details/79178732
时间段重叠的逻辑:

默认跨天的处理逻辑为:时间段跨天时,结束时间点的日期+1天  ,如:23:00~01:00  ,为时间加上相同日期后,将结束点的日期+1天


输入值或参考值其中一个跨天时,可能(只有下边的1,2二种情况,才可能需要<日期-1天>)要向左-1天后,再对二个时间段进行比较;
(谁跨天,谁-1天,判断<是否需要-1天>的依据是:<没跨天的时间段>完整地处在<跨天的时间段>的左侧时,<跨天的时间段>才需要-1天后,再判断,详细,见下边的1,2二种情况的描述)

1.参考值跨天,输入值不跨天,如果输入值的结束点小于参考值的开始点,此时,参考值要-1天,再比较二个时间段是否重叠 (此时,输入值完整在参考值的左边)
2.参考值不跨天,输入值跨天,如果参考的结束点小于输入值的开始点,此时,输入值要-1天,再比较二个时间段是否重叠 (此时,参考值完整地在输入值的左边)
3.如果二个时间段都没有跨天,直接比较
4.如果二个时间段都跨天了,直接比较,一定是重叠的(24点位置重叠)


举例:
1.
参考值跨天,输入值不跨天:
参考值 :23:00~01:00
即当输入值的范围在:00:00-22:59此范围内时,需要参考值-1天后,再比较,否则直接比较即可


2.参考值不跨天,输入值跨天

参考值:12:00~22:00
输入值跨天:22:01~22:00,输入值的结束点一定在参考值的右边(跨天,过24点了),当输入值的开始点大于参考值的结束点时,在今天是不重叠的,此时是有可能重叠,需要将输入值-1天后,再比较,方可比较出真正是否重叠

输入值的开始点小于参考值的开始或结束点,都是重叠的,但输入值的开始点大于参考值的结束点,也有可能是重叠的(此时需要将跨天的输入值-1天.
[这就是前二种情况:只要比较的时间段中只有一方跨天了,谁跨天,谁就<有可能>需要-1天,再比较;
是否要-1天,要比较<未跨天的时间段>是否<完整的>处在<跨天时间段的左侧>(即:<未跨天的时间段的结束时间点>小于<跨天的时间段的开始时间点>)])

逆向思维:
参考: http://blog.csdn.net/huangxin112/article/details/77152569  js判断两个时间段是否有重合部分(是否冲突)

逆向思维更简单:
描述:找出不重叠的情况更简单,输入值范围:x~y,参考值范围:a~b;
1.当输入值开始x和参考值的结束点b比较,b<x时,不重叠,(参考值ab完整处在输入值xy左边)
2.当输入值xy完整的处在参考值ab左边时,y<a时,不重叠
综上:if(b<x || y<a){不重叠} else{重叠}

展开阅读全文

没有更多推荐了,返回首页