你可以尝试下面的逻辑吗?
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
好的,所以这些并不复杂,它们只是简单的间隔。在这种情况下,您不能仅仅结合日期和时间来创建日期时间并使用正常的重叠比较?在大多数编程语言中将日期时间存储为两个单独的值是不常见的。 –