Problem
Given a list of datetime objects, group them consecutive date ranges.
ie; 2022-01-01, 2022-01-02, 2022-01-04, 2022-01-05 would yield:
[ 2022-01-01, 2022-01-02 ], [ 2022-01-04, 2022-01-05 ]
Code
from typing import List
from datetime import datetime
from datetime import timedelta
def group_consecutive_dates(dates: List[datetime]) -> List[List[datetime]]:
dates.sort()
result = []
current_group = [dates[0]]
for i in range(1, len(dates)):
if dates[i] == dates[i - 1] + timedelta(days=1):
current_group.append(dates[i])
else:
result.append(current_group)
current_group = [dates[i]]
result.append(current_group)
return result
Testing
dates = [
datetime(2022, 1, 1),
datetime(2022, 1, 2),
datetime(2022, 1, 5),
datetime(2022, 1, 6),
datetime(2022, 1, 7),
datetime(2022, 1, 8),
datetime(2022, 1, 15),
datetime(2022, 1, 16),
]
grouped_dates = group_consecutive_dates(dates)
Result
[[datetime.datetime(2022, 1, 1, 0, 0), datetime.datetime(2022, 1, 2, 0, 0)],
[datetime.datetime(2022, 1, 4, 0, 0),
datetime.datetime(2022, 1, 5, 0, 0),
datetime.datetime(2022, 1, 6, 0, 0),
datetime.datetime(2022, 1, 7, 0, 0),
datetime.datetime(2022, 1, 8, 0, 0)],
[datetime.datetime(2022, 1, 15, 0, 0), datetime.datetime(2022, 1, 16, 0, 0)]]