可能重複:
Determine Whether Two Date Ranges Overlap確定如果兩個時間段的任何一點重疊
我試圖找出如果兩個時間在PHP範圍重疊。我一直在提到Determine Whether Two Date Ranges Overlap作爲我的第一次嘗試,但是,它不符合所有情況。如果時間範圍嵌套在另一個時間範圍的開始時間和結束時間之間,則不會進行匹配。如果它與班次的開始或結束重疊,或者班次完全匹配,則按預期工作。
檢查什麼我談論的這個形象:
基本上,我試圖隱藏任何橙色的變化,如果他們在任何地方任何重疊的紅移。以下是我正在嘗試使用的代碼的相關部分。
if(($red['start'] <= $orange['end']) && ($red['end'] >= $orange['start'])) {
//Conflict handling
}
變量的值是UNIX時間戳。從邏輯上理解數字,我明白爲什麼上面的陳述失敗了。有很明顯的方法可以做更多的邏輯來確定一個轉變是否落在另一個轉變中(這是我可能需要做的),但是我希望獲得更普遍的結果。
編輯:添加每個塊的開始和結束時間的值。我同意我有應該工作。事實並非如此,我的問題在哪裏。我可能忽略了一些愚蠢的東西。
orange-start = 1352899800
orange-end = 1352907000
red-start = 1352923200
red-end = 1352926200
所以我的邏輯將陳述:
if((1352923200 <= 1352907000) && (1352926200 >= 1352899800))
所以緊接着,第一次比較失敗。
編輯2:它看起來像我的邏輯是健全的(我認爲是這樣),我的問題是與UNIX時間戳不匹配的實際時間顯示相關的東西。我感謝那些與我一起工作並幫助我發現問題的人。我希望我能接受安德烈和傑森的答案。
在你的例子中,red.start *是*劣於orange.end並且red.end * *優於orange.start ... – alestanis
+1,有興趣查看200+ upvotes的答案是否有* bug *。 –
從來沒有說過它有一個錯誤,它的答案是正確的。我使用答案是問題。看下面的答案進一步鞏固,我現在正在嘗試他們。 –