Get last sunday and saturday in python

Looking at using datetime to get the start and end date of the previous week, Sunday is Saturday.

So, if it's 8/12/13 today, I want to define a function that prints:

Last Sunday was 8/4/2013 and last Saturday was 8/10/2013

How do I write this?

EDIT: ok, so there seem to be some questions about edge cases. For Saturdays, I want in the same week, for anything else, I need a calendar week that precedes today .

+6
source share
4 answers

datetime.date.weekday returns 0 for Monday. You need to configure this.

Try the following:

 >>> import datetime >>> today = datetime.date.today() >>> today datetime.date(2013, 8, 13) >>> idx = (today.weekday() + 1) % 7 # MON = 0, SUN = 6 -> SUN = 0 .. SAT = 6 >>> idx 2 >>> sun = today - datetime.timedelta(7+idx) >>> sat = today - datetime.timedelta(7+idx-6) >>> 'Last Sunday was {:%m/%d/%Y} and last Saturday was {:%m/%d/%Y}'.format(sun, sat) 'Last Sunday was 08/04/2013 and last Saturday was 08/10/2013' 

If you are allowed to use python-deteutil :

 >>> import datetime >>> from dateutil import relativedelta >>> today = datetime.datetime.now() >>> start = today - datetime.timedelta((today.weekday() + 1) % 7) >>> sat = start + relativedelta.relativedelta(weekday=relativedelta.SA(-1)) >>> sun = sat + relativedelta.relativedelta(weekday=relativedelta.SU(-1)) >>> 'Last Sunday was {:%m/%d/%Y} and last Saturday was {:%m/%d/%Y}'.format(sun, sat) 'Last Sunday was 08/04/2013 and last Saturday was 08/10/2013' 
+13
source

I found the best answer from here works fine in my case

try it

 from datetime import datetime,timedelta import time def last_day(d, day_name): days_of_week = ['sunday','monday','tuesday','wednesday', 'thursday','friday','saturday'] target_day = days_of_week.index(day_name.lower()) delta_day = target_day - d.isoweekday() if delta_day >= 0: delta_day -= 7 # go back 7 days return d + timedelta(days=delta_day) 
+6
source
 from datetime import date def satandsun(input): d = input.toordinal() last = d - 6 sunday = last - (last % 7) saturday = sunday + 6 print date.fromordinal(sunday) print date.fromordinal(saturday) 

Note that this seems to be going through all your cases:

 >>> satandsun(date(2013, 8, 10)) 2013-08-04 2013-08-10 >>> satandsun(date(2013, 8, 11)) 2013-08-04 2013-08-10 >>> satandsun(date(2013, 8, 12)) 2013-08-04 2013-08-10 >>> satandsun(date(2013, 8, 13)) 2013-08-04 2013-08-10 >>> satandsun(date(2013, 8, 14)) 2013-08-04 2013-08-10 >>> satandsun(date(2013, 8, 15)) 2013-08-04 2013-08-10 >>> satandsun(date(2013, 8, 16)) 2013-08-04 2013-08-10 >>> satandsun(date(2013, 8, 17)) 2013-08-11 2013-08-17 
+5
source
 >>> today = date.today().toordinal() >>> lastWeek = today-7 >>> sunday = lastWeek - (lastWeek % 7) >>> saturday = sunday + 6 >>> print "Last Sunday was %s and last Saturday was %s" % (date.fromordinal(sunday), date.fromordinal(saturday)) Last Sunday was 2013-08-04 and last Saturday was 2013-08-10 
+3
source

Source: https://habr.com/ru/post/951594/


All Articles