2

Possible Duplicate:
Iterating through a range of dates in Python

I got a method where I pass in a start date and an end date. the end result is I want all the dates between the start date and end date as a list. For eg if the start date is '2013-01-01' and the end date is '2013-01-04' then ['2013-01-01','2013-01-02','2013-01-03','2013-01-04'] should be returned. I could do something like the below. But wondered if there a simple way I havent considered

year = int(startdate.split('-')[0])
month = int(startdate.split('-')[1])
day = int(startdate.split('-')[2])
Community
  • 1
  • 1
user1741339
  • 507
  • 2
  • 6
  • 11

3 Answers3

2
>>> from datetime import datetime, timedelta
>>> starttime = datetime.strptime('2013-01-01', '%Y-%m-%d')
>>> endtime = datetime.strptime('2013-01-04', '%Y-%m-%d')
>>> [starttime + timedelta(days=i) for i in range((endtime - starttime).days + 1)]
[datetime.datetime(2013, 1, 1, 0, 0), datetime.datetime(2013, 1, 2, 0, 0), datetime.datetime(2013, 1, 3, 0, 0), datetime.datetime(2013, 1, 4, 0, 0)]
>>> list(map(lambda x: x.strftime('%Y-%m-%d'), _))
['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04']
poke
  • 369,085
  • 72
  • 557
  • 602
1

This should work:

from datetime import datetime
from datetime import timedelta

d1 = datetime.strptime('2013-01-01', '%Y-%m-%d')
d2 = datetime.strptime('2013-01-04', '%Y-%m-%d')

[d1 + timedelta(days=x) for x in range(0, (d2 - d1).days + 1)]
ataylor
  • 64,891
  • 24
  • 161
  • 189
0

I'd go for:

from dateutil import parser as dateparser
from dateutil.rrule import rrule, DAILY

sd = dateparser.parse('2013-01-01')
ed = dateparser.parse('2013-01-04')

dates = (rrule(DAILY, sd, until=ed))
fmt = '{:%Y-%m-%d}'
print map(fmt.format, dates)
# ['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04']
Jon Clements
  • 138,671
  • 33
  • 247
  • 280