Skip to content Skip to sidebar Skip to footer

Build Array Of Dates In Last Week, This Week And Next Week

I'm constantly tripping over things with regards to dates in Python. In my webapp I want to show every day of three weeks of a calendar: The last week, the current week and the fol

Solution 1:

Nope, that's pretty much it. But a list comprehension, basing off the datetime.date.weekday() result, should be easy enough:

today = datetime.date(2013, 06, 26)
dates = [today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), 14 - today.weekday())]

Remember, ranges do not have to start at 0. :-)

Demo:

>>>import datetime>>>from pprint import pprint>>>today = datetime.date(2013, 07, 12)>>>pprint([today + datetime.timedelta(days=i) for i inrange(-7 - today.weekday(), 14 - today.weekday())])
[datetime.date(2013, 7, 1),
 datetime.date(2013, 7, 2),
 datetime.date(2013, 7, 3),
 datetime.date(2013, 7, 4),
 datetime.date(2013, 7, 5),
 datetime.date(2013, 7, 6),
 datetime.date(2013, 7, 7),
 datetime.date(2013, 7, 8),
 datetime.date(2013, 7, 9),
 datetime.date(2013, 7, 10),
 datetime.date(2013, 7, 11),
 datetime.date(2013, 7, 12),
 datetime.date(2013, 7, 13),
 datetime.date(2013, 7, 14),
 datetime.date(2013, 7, 15),
 datetime.date(2013, 7, 16),
 datetime.date(2013, 7, 17),
 datetime.date(2013, 7, 18),
 datetime.date(2013, 7, 19),
 datetime.date(2013, 7, 20),
 datetime.date(2013, 7, 21)]

Solution 2:

I guess clean and self documenting solution is:

importdatetimetoday= datetime.date.today()
start_day = today - datetime.timedelta(today.weekday() + 7)
three_weeks = [start_day + datetime.timedelta(x) for x in range(21)]

Solution 3:

The datetime module has some support for operations like this:

oneDay = datetime.timedelta(days=1)
oneWeek = datetime.timedelta(days=7)

You can use standard math with them:

today = datetime.date.today()
lastMonday = today - datetime.timedelta(days=today.weekday())

lastWeek = lastMonday - oneWeek
nextWeek = lastMonday + oneWeek

Post a Comment for "Build Array Of Dates In Last Week, This Week And Next Week"