Skip to content

Instantly share code, notes, and snippets.

@nicksspirit
Created January 12, 2022 17:59
Show Gist options
  • Save nicksspirit/e0bff40008bbb28bb90812e4eb8bdc4c to your computer and use it in GitHub Desktop.
Save nicksspirit/e0bff40008bbb28bb90812e4eb8bdc4c to your computer and use it in GitHub Desktop.
Split a date range into smaller ranges.
def date_delta(startdate, enddate, no_of_ranges):
start_epoch = calendar.timegm(startdate.timetuple())
end_epoch = calendar.timegm(enddate.timetuple())
date_diff = end_epoch - start_epoch
step = date_diff / no_of_ranges
return datetime.timedelta(seconds=step)
def date_span(startdate, enddate, delta=datetime.timedelta(days=1)):
currentdate = startdate
while currentdate + delta <= enddate:
todate = (currentdate + delta).replace(hour=23, minute=59,second=59)
yield currentdate, todate
currentdate += delta
currentdate.replace(hour=0, minute=0,second=0)
if "__file__" == __main__:
startdate = datetime.datetime.strptime('2019-01-01', '%Y-%m-%d')
enddate = datetime.datetime.strptime('2020-01-01', '%Y-%m-%d')
# Get timedeltas based on splitting the range by 10
delta = date_delta(startdate, enddate, 4)
print(delta)
for from_datetime, to_datetime in date_span(startdate, enddate, delta):
print(from_datetime, to_datetime)
# 91 days, 6:00:00
# 2019-01-01 00:00:00 2019-04-02 23:59:59
# 2019-04-02 06:00:00 2019-07-02 23:59:59
# 2019-07-02 12:00:00 2019-10-01 23:59:59
# 2019-10-01 18:00:00 2020-01-01 23:59:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment