»
Oct 7th, 2009,
category:
Python
,
Perm Link...
I need to write a code to determine if two date ranges are intersect to each other. I found Comparing date ranges on Stack Overflow. I've converted it to Python as below code:
The implementation
def is_intersect(dt1start, dt1end, dt2start, dt2end):
if dt2end <= dt1start or dt2start >= dt1end:
return False
return dt1start <= dt2end and dt1end >= dt2start
def is_intersect(dt1start, dt1end, dt2start, dt2end): if dt2end <= dt1start or dt2start >= dt1end: return False return dt1start <= dt2end and dt1end >= dt2start
Unit tests
def test_intersect(self): """ |-------------------| compare to this one 1 |---------| contained within 2 |----------| contained within, equal start 3 |-----------| contained within, equal end 4 |-------------------| contained within, equal start+end 5 |------------| not fully contained, overlaps start 6 |-----------| not fully contained, overlaps end 7 |------------------------| overlaps start, bigger 8 |-----------------------| overlaps end, bigger 9 |------------------------------| overlaps entire period 10 |---| not overlap, less than 11 |-------| not overlap, end equal 12 |---| not overlap, bigger than 13 |---| not overlap, start equal """ #1 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,6,30), datetime(2009,10,1,6,40), ) #2 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,6,0), datetime(2009,10,1,6,30), ) #3 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,6,30), datetime(2009,10,1,7,0), ) #4 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), ) #5 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,5,30), datetime(2009,10,1,6,30), ) #6 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,6,30), datetime(2009,10,1,7,30), ) #7 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,5,30), datetime(2009,10,1,7,0), ) #8 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,6,0), datetime(2009,10,1,7,30), ) #9 assert utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,5,0), datetime(2009,10,1,8,0), ) #10 assert not utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,5,0), datetime(2009,10,1,5,30), ) #11 assert not utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,5,0), datetime(2009,10,1,6,0), ) #12 assert not utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,7,30), datetime(2009,10,1,8,0), ) #13 assert not utils.is_intersect( datetime(2009,10,1,6,0), datetime(2009,10,1,7,0), datetime(2009,10,1,7,0), datetime(2009,10,1,8,0), )
Enjoy!