Open In App
Related Articles

Python program to get the nth weekday after a given date

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

Given a date and weekday index, the task is to write a Python program to get the date for the given day of the week occurring after the given date. The weekday index is based on the below table:

IndexWeekday
0Monday
1Tuesday
2Wednesday
3Thursday
4Friday
5Saturday
6Sunday

Examples:

Input : test_date = datetime.datetime(2017, 3, 14), weekday_idx = 4
Output : 2017-03-17 
Explanation : 14 March is Tuesday, i.e 1 weekday, 4th weekday is a Friday, i.e 17 March.

Input : test_date = datetime.datetime(2017, 3, 12), weekday_idx = 5
Output : 2017-03-18
Explanation : 12 March is Sunday, i.e 6th weekday, 5th weekday in next week is a Saturday, i.e 18 March.

Method #1 : Using timedelta() + weekday()

In this, we subtract the date weekday from the weekday index and then check for required index extracted, then the required day, if negative is summed with 7 and then the resultant number is added to current date using timedelta().

Python3

# Python3 code to demonstrate working of
# Next weekday from Date
# Using timedelta() + weekday()
import datetime
 
# initializing dates
test_date = datetime.datetime(2017, 3, 14)
 
# printing original date
print("The original date is : " + str(test_date)[:10])
 
# initializing weekday index
weekday_idx = 4
 
# computing delta days
days_delta = weekday_idx - test_date.weekday()
if days_delta <= 0:
    days_delta += 7
 
# adding days to required result
res = test_date + datetime.timedelta(days_delta)
 
# printing result
print("Next date of required weekday : " + str(res)[:10])

                    

Output
The original date is : 2017-03-14
Next date of required weekday : 2017-03-17

Method #2 : Using lambda function

Using the lambda function provides a shorthand and compact solution to the question. 

Python3

# Python3 code to demonstrate working of
# Next weekday from Date
# Using lambda function
import datetime
 
# initializing dates
test_date = datetime.datetime(2017, 3, 14)
 
# printing original date
print("The original date is : " + str(test_date)[:10])
 
# initializing weekday index
weekday_idx = 4
 
# lambda function provides one liner shorthand
def lfnc(test_date, weekday_idx): return test_date + \
    datetime.timedelta(days=(weekday_idx - test_date.weekday() + 7) % 7)
 
 
res = lfnc(test_date, weekday_idx)
 
# printing result
print("Next date of required weekday : " + str(res)[:10])

                    

Output
The original date is : 2017-03-14
Next date of required weekday : 2017-03-17

Method #3: Using a list comprehension and slicing

In this method, we first generate a list of all dates after the given date up to 7 days later using a list comprehension and the range() function. We add an extra day to the range so that we can slice the list up to 7 days later without including the 8th day.

Next, we use another list comprehension to filter the list to include only dates with the desired weekday.

Finally, we select the nth occurrence of the weekday by indexing the filtered list using [n-1], since the list is zero-indexed but the problem specifies a 1-indexed occurrence.

Python3

from datetime import datetime, timedelta
 
test_date = datetime(2017, 3, 14)
weekday_idx = 4
print("The original date is:",str(test_date)[:10])
n = 1  # nth occurrence of the weekday (in this case, 1st occurrence)
 
# Generate a list of all dates after the given date up to 7 days later
dates = [test_date + timedelta(days=i) for i in range(8)]
 
# Filter the list to include only dates with the desired weekday
filtered_dates = [d for d in dates if d.weekday() == weekday_idx]
 
# Select the nth occurrence of the weekday
result = filtered_dates[n-1]
 
print("Next date of required weekend is:",result.strftime('%Y-%m-%d'))

                    

Output
The original date is: 2017-03-14
Next date of required weekend is: 2017-03-17


Last Updated : 11 May, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads