ฉันใช้คลาส TimeRange ตามที่คุณเห็นด้านล่าง
get_overlapped_range อันดับแรกจะลบล้างตัวเลือกที่ไม่ทับซ้อนทั้งหมดด้วยเงื่อนไขง่ายๆจากนั้นคำนวณช่วงที่ทับซ้อนกันโดยพิจารณาตัวเลือกที่เป็นไปได้ทั้งหมด
ในการรับจำนวนวันคุณจะต้องใช้ค่า TimeRange ที่ส่งคืนจาก get_overlapped_range และหารระยะเวลาด้วย 60 * 60 * 24
class TimeRange(object):
def __init__(self, start, end):
self.start = start
self.end = end
self.duration = self.end - self.start
def is_overlapped(self, time_range):
if max(self.start, time_range.start) < min(self.end, time_range.end):
return True
else:
return False
def get_overlapped_range(self, time_range):
if not self.is_overlapped(time_range):
return
if time_range.start >= self.start:
if self.end >= time_range.end:
return TimeRange(time_range.start, time_range.end)
else:
return TimeRange(time_range.start, self.end)
elif time_range.start < self.start:
if time_range.end >= self.end:
return TimeRange(self.start, self.end)
else:
return TimeRange(self.start, time_range.end)
def __repr__(self):
return '{0} ------> {1}'.format(*[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(d))
for d in [self.start, self.end]])