Мне нужно иметь возможность точно находить месяцы между двумя датами в python. У меня есть решение, которое работает, но оно не очень хорошо (как в элегантном), так и быстро.
dateRange = [datetime.strptime(dateRanges[0], "%Y-%m-%d"), datetime.strptime(dateRanges[1], "%Y-%m-%d")]
months = []
tmpTime = dateRange[0]
oneWeek = timedelta(weeks=1)
tmpTime = tmpTime.replace(day=1)
dateRange[0] = tmpTime
dateRange[1] = dateRange[1].replace(day=1)
lastMonth = tmpTime.month
months.append(tmpTime)
while tmpTime < dateRange[1]:
if lastMonth != 12:
while tmpTime.month <= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
else:
while tmpTime.month >= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
Итак, чтобы объяснить, что я здесь делаю, беру две даты и преобразовывая их из формата iso в объекты datetime python. Затем я повторяю добавление недели к объекту start datetime и проверяет, больше ли числовое значение месяца (если месяц не декабрь, а затем он проверяет, меньше ли дата). Если значение больше, я добавляю его в список месяцев и продолжайте цикл до тех пор, пока я не получу дату окончания.
Он отлично работает, это просто не похоже на хороший способ сделать это...