zesla
zesla

Reputation: 11793

How to get a list of some specific weekdays within a date range in python

I need to get a list of Mondays within a date range.

For example:

# selected date range
date_range = ['2019-02-25', '2019-03-25']
# desired output:
mondays = ['2019-02-25', '2019-03-04', '2019-03-11', '2019-03-18', '2019-03-25']

# selected date range
date_range = ['2019-02-25', '2019-03-20']
# desired output
mondays = ['2019-02-25', '2019-03-04', '2019-03-11', '2019-03-18']

The starting date is always a Monday.

Does anyone know how I can generate the list of Mondays using python datetime?

Upvotes: 2

Views: 1733

Answers (2)

mechanical_meat
mechanical_meat

Reputation: 169284

In case you can use 3rd-party module dateutil:

from dateutil import rrule, parser

def case_of_the_mondays(start,end): 
    mondays = list(rrule.rrule(rrule.WEEKLY,
                               dtstart=parser.parse(start),
                               until=parser.parse(end))) 
    return mondays 

Result:

In [22]: case_of_the_mondays('2019-02-25','2019-03-25')
Out[22]: 
[datetime.datetime(2019, 2, 25, 0, 0),
 datetime.datetime(2019, 3, 4, 0, 0),
 datetime.datetime(2019, 3, 11, 0, 0),
 datetime.datetime(2019, 3, 18, 0, 0),
 datetime.datetime(2019, 3, 25, 0, 0)]

Upvotes: 1

Rakesh
Rakesh

Reputation: 82755

This is one approach using weekday().

Ex:

import datetime

def get_mondays(date_start, date_end):
    date_start = datetime.datetime.strptime(date_start, "%Y-%m-%d")
    date_end = datetime.datetime.strptime(date_end, "%Y-%m-%d")

    result = []
    while date_start <= date_end:
        if date_start.weekday() == 0:   #0 == Monday
            result.append(date_start.strftime("%Y-%m-%d")) 
        date_start += datetime.timedelta(days=1)

    return result

print(get_mondays('2019-02-25', '2019-03-25'))
print(get_mondays('2019-02-25', '2019-03-20'))

Output:

['2019-02-25', '2019-03-04', '2019-03-11', '2019-03-18', '2019-03-25']
['2019-02-25', '2019-03-04', '2019-03-11', '2019-03-18']

Upvotes: 1

Related Questions