問題
如何判斷兩筆資料的請始結束日期有重疊?
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