How to display all months between two dates?

I am trying to create a list of months between two dates. For instance:

startDate = '2016-1-31'
endDate = '2017-3-26'

It should look like this:

datetime.date(2016, 1, 31)
datetime.date(2016, 2, 28)
and so on....

I try so hard

startDate = '2016-1-28'
endDate = '2017-3-26'

start = date(*map(int, startDate.split('-')))
end = date(*map(int, endDate.split('-')))

week = start
dateData = []

while week <= end:
    dateData.append(week)
    week = week + datetime.timedelta(weeks=4)

pprint(dateData)

This gives a result like:

[datetime.date(2016, 1, 31),
 datetime.date(2016, 2, 28),
 datetime.date(2016, 3, 27),
 datetime.date(2016, 4, 24),
 datetime.date(2016, 5, 22),
 datetime.date(2016, 6, 19),
 datetime.date(2016, 7, 17),
 datetime.date(2016, 8, 14),
 datetime.date(2016, 9, 11),
 datetime.date(2016, 10, 9),
 datetime.date(2016, 11, 6),
 datetime.date(2016, 12, 4),
 datetime.date(2017, 1, 1),
 datetime.date(2017, 1, 29),
 datetime.date(2017, 2, 26),
 datetime.date(2017, 3, 26)]

Here, "2016, 12" and "2017, 1" are repeated twice. Can anyone help me solve this problem.

+4
source share
2 answers

You can use the dateutilextension relativedeltaas shown below -

from datetime import datetime
from dateutil.relativedelta import relativedelta

startDate = '2016-1-28'
endDate = '2017-3-26'

start = datetime.strptime(startDate, '%Y-%m-%d').date()
end = datetime.strptime(endDate, '%Y-%m-%d').date()
cur_date = start

while cur_date < end:
    print cur_date
    cur_date += relativedelta(months=1)

Below is the conclusion

2016-01-28
2016-02-28
2016-03-28
2016-04-28
2016-05-28
2016-06-28
2016-07-28
2016-08-28
2016-09-28
2016-10-28
2016-11-28
2016-12-28
2017-01-28
2017-02-28
+7
source

, , , . 4 28 . 1 29 (2017) 28 ; .

, , . , , , .

  • .
  • , , .

, . , :

import datetime

startDate = '2016-1-28'
endDate = '2017-3-26'

start = datetime.date(*map(int, startDate.split('-')))
end = datetime.date(*map(int, endDate.split('-')))

week = start
dateData = []

dateData.append(start)

rangeYear = (end.year - start.year)

for i in range(rangeYear + 1):
    if i == 0:
        for j in range(1,13-start.month):
            date = datetime.date(start.year, start.month+j, 1)
            dateData.append(date)
    elif (i > 0) & (i < rangeYear):
        for j in range(1,12):
            date = datetime.date(start.year+i, j, 1)
            dateData.append(date)
    elif i == rangeYear:
        for j in range(1,end.month):
            date = datetime.date(start.year+i, j, 1)
            dateData.append(date)

dateData.append(end)
+1

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


All Articles