# A def _create_months_interval(start, end): while True: yield (start, start + relativedelta(day=31)) start = start + relativedelta(months=1) if start > end: break # B def _create_months_interval(start, end): dates = list(rrule(MONTHLY, bymonthday=(1,-1), dtstart=start, until=end) return [dates[i:i+2] for i in range(0, len(dates), 2)]