Использование генератора для итерации по месяцам. Сохраняет даты начала и окончания.
import datetime
import calendar
dateStart = datetime.date(2017, 8, 2)
dateEnd = datetime.date(2018, 1, 1)
def months(start, end):
''' Input a start and end date and yields a numerical month
(between 1 and 12) for each month between the dates.
'''
# Include start month:
if start < end:
yield start.month
while start < end:
if start.month < 12:
start = start.replace(month=start.month+1)
else:
start = start.replace(year=start.year+1).replace(month=1)
yield start.month
months = [calendar.month_name[month] for month in
sorted(set(months(dateStart, dateEnd)))]
print(dateStart)
print(dateEnd)
print(months)
Вывод:
2017-08-02
2018-01-01
['January', 'August', 'September', 'October', 'November', 'December']
Приведенные выше данные будут печатать не более 12 месяцев, даже если эти две даты разделены более чем на 12 месяцев. Если требуется перечислить повторяющиеся месяцы, чтобы это было немного проще (обратите внимание, что я добавил несколько месяцев к dateEnd
для иллюстрации).
import datetime
import calendar
dateStart = datetime.date(2017, 8, 2)
dateEnd = datetime.date(2018, 10, 1)
def months(start, end):
''' Input a start and end date and yields a numerical month
(between 1 and 12) for each month between the dates.
'''
if start < end:
yield calendar.month_name[start.month]
while start < end:
if start.month < 12:
start = start.replace(month=start.month+1)
else:
start = start.replace(year=start.year+1).replace(month=1)
yield calendar.month_name[start.month]
months = [month for month in months(dateStart, dateEnd)]
print(months)
Вывод:
['August', 'September', 'October', 'November', 'December', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October']