23

Eg1. Suppose I have a day 4/30/07 .Then I need to get 4/27/07.

Eg2. Suppose I have a day 6/29/07 .Then I need to get 6/22/07.

1
  • 4
    not necessarily. actually i just wrote very similar code (get the monday of the week indicated by a random date withing that week) less than a day ago for a timetable for one of my websites. Commented May 30, 2011 at 6:11

5 Answers 5

49

Assuming day is a datetime.date or datetime.datetime object, this code creates a datetime/date object for last week's friday:

friday = day - timedelta(days=day.weekday()) + timedelta(days=4, weeks=-1) 

Explanation: timedelta(days=day.weekday()) is the offset between monday and day so adding 4 days and subtracting one week will get you last week's friday.

Of course you can simplify this (+4d -1w = -3d):

friday = day - timedelta(days=day.weekday() + 3) 

Note: To get timedelta, use from datetime import timedelta or just import datetime and use datetime.timedelta

Sign up to request clarification or add additional context in comments.

4 Comments

That doesn't work on Saturday and Sunday. Try this: friday = day - timedelta(days=(day.weekday() - 4) % 7, weeks=-1)
With which date did you have this problem? I tested with 2012-09-08 and 2012-09-09 and my code correctly gave me 2012-08-31 while yours resulted in 2012-09-14
My code should be weeks=0 (or omit the argument). I miss-posted. Also, the desired result depends on what you mean by "previous/last week" and whether you define a week starting on Sunday or Monday. I may have misinterpreted the question. My (corrected) code gives the most recent Friday.
Ah well, for me a week starts on monday... Feel free to post another answer mentioning that yours assumes weeks start on sunday.
34

An another and easier way is to use python-dateutil. To get the previous Friday :

>>> from dateutil.relativedelta import relativedelta, FR >>> from datetime import datetime >>> datetime(2015, 7, 8) + relativedelta(weekday=FR(-1)) datetime.datetime(2015, 7, 3, 0, 0) 

And the next Friday :

>>> datetime(2015, 7, 8) + relativedelta(weekday=FR(+1)) datetime.datetime(2015, 7, 10, 0, 0) 

1 Comment

This should be the top answer, no?
4

Not specific to Friday, but given a day "taget_dayofweek" (where Monday is 0 and Sunday is 6)

from datetime import datetime target_dayofweek = 4 # Friday current_dayofweek = datetime.now().weekday() # Today if target_dayofweek <= current_dayofweek: # target is in the current week endDate = datetime.now() - timedelta(current_dayofweek - target_dayofweek) else: # target is in the previous week endDate = datetime.now() - timedelta(weeks=1) + timedelta(target_dayofweek - current_dayofweek) 

Comments

1

There are plenty of options in pandas.tseries.offsets This one is for previous week friday.

from pandas.tseries.offsets import Week f_dates = required_df.index - Week(1, weekday=4) 

Comments

0
date_object = datetime.date.today() from dateutil.relativedelta import relativedelta previousWeekLastDay = date_object + relativedelta(weekday=SU(-1)) previousWeekFirstDay = previousWeekLastDay + relativedelta(weekday=MO(-1)) print(previousWeekFirstDay) print(previousWeekLastDay) previoustopreviousWeekLastDay1= date_object + relativedelta(weekday=SU(-2)) previoustopreviousWeekFirstDay1= previousWeekLastDay1 + relativedelta(weekday=MO(-1)) print(previoustopreviousWeekFirstDay1) print(previoustopreviousWeekLastDay1) 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.