Python中的日期/时间范围计算

时间:2018-12-07 17:02:29

标签: python python-3.x datetime flask

因此,我正在创建一个预订系统,该房间在日期/时间范围内只能预订一次

让我们说房间已经在以下日期/时间预订

2018-12-10 09:00:00-2018-12-10 10:00:00

这是我的python代码,用于确定再次尝试预订房间时是否已在预定的时间范围内预订了房间。

start_date_time = form.start_date_time.data #The Start Time Input
end_date_time = form.end_date_time.data #The End Time Input
exists = 0 #A variable to add to if the time is within range already

for b in fetchBookingByRoomID(room_id): #A function to get the times already booked storing the results in "b" variable

            if start_date_time >= b[2] and start_date_time <= b[3]: 
                exists = exists + 1

            if end_date_time >= b[2] and end_date_time <= b[3]:
                exists = exists + 1 
if exists <= 0:
     #BOOK THE ROOM
else:
     #ERROR : Time Slot already being used

这样做,如果开始时间大于已经预订的开始时间,并且结束时间小于另一个预订的结束时间,那么我将设法检测出重叠的预订。但是,例如,如果我尝试预订以下内容:

2018-12-10 08:00:00-2018-12-10 12:00:00

这将允许我预订房间,并且不会检测到该时间段内已有预订,因为要预订的开始时间小于已经预订的开始时间,并且要预订的结束时间大于结束时间已被预订,因此这意味着两个IF语句均未满足,因此代码会继续创建预订。

我想要实现的是,如果某个预订已经小于输入的范围,而该范围仍然与要预订的范围相同,那将不允许我创建预订。

有人可以帮我弄清楚逻辑吗? 谢谢

该帖子被标记为重复,但是不幸的是,另一个问题并不相同,因为他正在比较天数,在这里我需要比较时间。另外,在其他问题中,允许重复,但在我的情况下则不允许。

1 个答案:

答案 0 :(得分:0)

从日期时间中提取时间,然后进行比较

start_time =start_date_time.strftime('%H:%M:%S')

类似地更改start_end_timeb[2]b[3]