2つのdatetime型の期間内で日毎、月毎に処理をする
2つのdatetime型の期間内の日毎、または月毎にdatetimeを返すジェネレータ
start_dateとend_dateの前後関係などは考慮していない
# coding=utf-8 from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta def date_span(start_date, end_date): """start_date、end_dateの期間に含まれる日毎のdatetimeオブジェクトを返すジェネレータ """ for n in range((end_date - start_date).days + 1): yield start_date + timedelta(n) def month_span(start_date, end_date): """start_date、end_dateの期間に含まれる月毎のdatetimeオブジェクトを返すジェネレータ """ yield start_date while(start_date.year != end_date.year or start_date.month != end_date.month): start_date = start_date + relativedelta(months=1) yield start_date today = datetime.strptime('20120616', '%Y%m%d') next_month = today + relativedelta(months=1) for target_date in date_span(today, next_month): # 日毎の処理 print target_date for target_date in month_span(today, next_month): # 月毎の処理 print target_date