How to calculate next Friday?

How can I calculate the date of the next Friday?


A certain improvement on @taymon`s answer:

today = datetime.date.today()
friday = today + datetime.timedelta( (4-today.weekday()) % 7 )

4 is Friday's weekday (0 based, counting from Monday).
( (4-today.weekday()) % 7) is the number of days till next friday (% is always non-negative).

After seeing @ubuntu's answer, I should add two things:
1. I'm not sure if Friday=4 is universally true. Some people start their week on Sunday.
2. On Friday, this code returns the same day. To get the next, use (3-today.weekday())%7+1. Just the old x%n to ((x-1)%n)+1 conversion.


To start off, you'll need the datetime library:

import datetime

Then you need a starting date; that is, today.

d = datetime.date.today()

Starting from there, you'll want to keep going forward until you reach Friday. The date.weekday method represents Monday through Sunday as 0 through 6, so:

while d.weekday() != 4:

If the current day isn't Friday, you'll have to add a day, one at a time. To add an interval of time to a date object, you use a timedelta object.

    d += datetime.timedelta(1)

Put it all together, and d will ultimately contain a date object representing next Friday. Note that if today is Friday, this code will produce today; you can tweak it if you need it to produce next Friday instead.


Here is how you could do it using dateutil:

import datetime as DT
import dateutil.relativedelta as REL
today = DT.date.today()
print(today)
# 2012-01-10

rd = REL.relativedelta(days=1, weekday=REL.FR)
next_friday = today + rd
print(next_friday)
# 2012-01-13

(The days = 1 argument ensures that the "next Friday" is not the same as today in case today happens to be a Friday.)


I found this pendulum pretty useful. Just one line

>>> pendulum.now().next(pendulum.FRIDAY).strftime('%Y-%m-%d')
'2019-04-26'