近期在撰寫時間判斷的業務邏輯時,遇上要開始結束時間跨日 + 每日能使用的時段範圍是不連續的。這邊筆記下思路。
內容
場景舉例:使用者選擇 2024/1/1 16:00 ~ 2024/1/2 11:00 的時段使用器材,但折扣碼每天能使用的時段是 10:00 ~ 18:00。
思路
1. 非跨日
判斷「開始時間」和「結束時間」是否在「規定的時段範圍」內即可。日期的話 3 者都是一樣的
2. 跨日
依序執行以下判斷:
2-1. 「開始時間」是否在「開始日期規定的時間範圍內」
2-2. 「結束時間」是否在「結束日期規定的時間範圍內」,結束日期會是開始日期 + 1
2-3. 計算「開始時間與結束時間」和「開始日期規定的時間範圍尾巴與結束日期規定的時間範圍開始」是否有重疊區間,縱使是沾到邊也算
判斷條件是:2-1 需為 true、2-2 需為 true 且 2-3 需為 false ( 也就是沒有 overlap )