亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

確定兩個日期范圍是否重疊

確定兩個日期范圍是否重疊

茅侃侃 2019-05-23 10:57:39
確定兩個日期范圍是否重疊給定兩個日期范圍,確定兩個日期范圍是否重疊的最簡單或最有效的方法是什么?舉個例子,假設我們有通過日期時間變量表示的范圍StartDate1來EndDate1 和 StartDate2到EndDate2。
查看完整描述

3 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

(StartA <= EndB)和(EndA> = StartB)

證明:
讓ConditionA意味著DateRange完全在DateRange B之后
_                        |---- DateRange A ------| |---Date Range B -----|                           _
(如果是,則為True StartA > EndB

讓ConditionB表示DateRange A完全在DateRange B之前
|---- DateRange A -----|                       _ _                          |---Date Range B ----|
(如果是,則為True EndA < StartB

然后,如果A Nor B都不為真,則存在重疊 - 
(如果一個范圍既不完全在另一個范圍之后,
也不完全在另一個之前,那么它們必須重疊。)

現在,德摩根的一項法律規定

Not (A Or B) <=> Not A And Not B

這意味著: (StartA <= EndB)  and  (EndA >= StartB)


注意:這包括邊緣完全重疊的條件。如果你想排除,
改變>=運營商>,并<= 以<


筆記2。由于@Baodad,看到這個博客,實際的重疊是最少:
endA-startA,endA - startB,endB-startAendB - startB}

(StartA <= EndB)  and  (EndA >= StartB) (StartA <= EndB)  and  (StartB <= EndA)


注3。感謝@tomosius,更短的版本讀?。?br/>DateRangesOverlap = max(start1, start2) < min(end1, end2)
這實際上是更長實現的語法快捷方式,其中包括額外的檢查以驗證開始日期是在endDates之前還是之前。從上面得出這個:

如果開始日期和結束日期可能不正常,即,如果有可能startA > endA或者startB > endB,那么您還必須檢查它們是否有序,這意味著您必須添加兩個額外的有效性規則:
(StartA <= EndB) and (StartB <= EndA) and (StartA <= EndA) and (StartB <= EndB)或:
(StartA <= EndB) and (StartA <= EndA) and (StartB <= EndA) and (StartB <= EndB)或,
(StartA <= Min(EndA, EndB) and (StartB <= Min(EndA, EndB)) 或:
(Max(StartA, StartB) <= Min(EndA, EndB)

但要實現Min()Max(),你必須代碼,(使用簡潔?三元),:
(StartA > StartB? Start A: StartB) <= (EndA < EndB? EndA: EndB)


查看完整回答
反對 回復 2019-05-23
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

我認為,如果符合以下條件,兩個范圍重疊就足夠了:

(StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)


查看完整回答
反對 回復 2019-05-23
  • 3 回答
  • 0 關注
  • 1067 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號