時間段重疊的邏輯:
默認跨天的處理邏輯為:時間段跨天時,結束時間點的日期+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{重疊}