你可以嘗試下面的邏輯嗎?
01 if (new.StartDate > existing.EndDate OR new.EndDate < existing.StartDate) {
02 resource is available for booking
03 } else if (new.EndDate = existing.StartDate AND new.StartDate <= existing.StartDate) {
04 if (new.EndTime =< existing.StartTime OR new.StartTime >= existing.EndTime) {
05 resource is available for booking
06 } else {
07 resource is NOT available for booking
08 }
09 } else if (new.StartDate = existing.EndDate) {
10 if (new.StartTime >= existing.EndTime) {
11 resource is available for booking
12 } else {
13 resource is NOT available for booking
14 }
15 } else {
16 resource is NOT available for booking
17 }
讓我們檢查一個案件的基礎;
通 - 資源可用
失敗 - 資源不可用
現有預訂到位
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-23-2016 | 07-29-2016 | 08:50 | 22:00
案例1
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-25-2016 | 07-25-2016 | 08:00 | 08:30
結果 - 這種情況下會失敗;在上面的代碼
案例@line 16 2
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-23-2016 | 07-23-2016 | 08:00 | 08:30
結果 - 這種情況下將通過;在代碼@line 05以上
案例3
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-29-2016 | 07-29-2016 | 22:01 | 22:30
結果 - 這種情況下將通過;在代碼@line 11上方
案例4
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-23-2016 | 07-23-2016 | 09:00 | 11:30
結果 - 這種情況下會失敗; @line 07在上面的代碼
請檢查並讓我知道,如果在任何情況下上述邏輯會給出一個正確的答案。
爲什麼從8:00到8:30的預訂與8:50到22:00的預訂有衝突? –
如果有人在07-23-2016 8:50預訂了小型巴士旅行並於07-29-2016 22:00將其返回,那麼如果有人試圖在07-25-2016在8:00至8:30小巴不可用。 – JK36
好的,所以這些並不複雜,它們只是簡單的間隔。在這種情況下,您不能僅僅結合日期和時間來創建日期時間並使用正常的重疊比較?在大多數編程語言中將日期時間存儲爲兩個單獨的值是不常見的。 –