分別用 startDate1,endDate1 和 startDate2,endDate2 表示兩段時間
如果考慮寫出兩個時間段重疊的每種情況的話,會比較多,寫出的判斷也比較長,可以反過來考慮如果判斷兩段時間不重疊的情況。
考慮一段時間不動,另一段時間不重疊的話,另一段時間只能在不動的時間段的一前一后。
這里假設不動的藍色塊時間段為 startDate2,endDate2
很容易寫出不重疊的判斷:
endDate1 < startDate2 || endDate2 < startDate1
這時再取反就為重疊的條件
!(endDate1 < startDate2 || endDate2 < startDate1)
即為:
endDate1 >= startDate2 && endDate2 >= startDate1
這里可以用 PHP 封裝成方法,因為PHP可以直接比較時間大小所以不用轉成時間戳比較了。
當然傳進來的時間參數需要是正確的時間格式。
function isOverlap($startDate1, $endDate1, $startDate2, $endDate2) { return $endDate1 >= $startDate2 && $startDate1 <= $endDate2; }