2018年4月13日

如何判斷兩筆資料的起始和結束日期有重疊?

問題

如何判斷兩筆資料的請始結束日期有重疊?
ANS:  (StartA <= EndB) and (EndA >= StartB)

Start                            End
|---- DateRange {0} ------|
證明:

A1. false 因為  StartA > endB
                          |---- DateRange A ------|
|---Date Range B -----|   

A2. false
|---- DateRange A ------|                     
                           |---Date Range B -----|
-----------------------------------------------------------
B1. True
                      |---- DateRange A ------|
|---Date Range B -----|
                            _
B2. True
|---- DateRange A ------|                     
                  |---Date Range B -----|      

B3. True
|---- DateRange A ------|                     
   |---Date Range B --|                

B4. True
   |-- DateRange A --|                     
|---Date Range B -----|                     

  
記法:
導出由false兩條件,再Not
Not (false條件)
Not (EndB <StartA or EndA < StartB)
等於
(EndB >=StartA) and (EndA >= StartB)
等於(調一下第一個判斷式前後順序)
(StartA <= EndB) and (EndA >= StartB)

用途:


排班系統:判斷某人排班時間是否重疊
會議室Booking系統:判斷某會議室booking時間是否重疊

Reference:
determine-whether-two-date-ranges-overlap

date-range-overlap