私はそれがあなたが意味することを望みます。わかりやすくするためのテストも提供します。私たちがtoday
に達するか、または1ヶ月になるまで反復するだけです。
from datetime import timedelta
from datetime import date
def get_month_dates_with_same_weekday(dt, dt_end=None):
mon = dt.month
rv = []
dt_end = date.today() if dt_end is None else dt_end
while dt.month == mon and dt <= dt_end:
rv.append(dt)
dt = dt + timedelta(days=7)
return rv
def check(dt1, dt2):
assert dt1.weekday() == dt.weekday()
assert dt1.month == dt.month
if __name__ == '__main__':
dt1 = date(2011, 10, 15)
rv = get_month_dates_with_same_weekday(dt1)
for dt in rv:
check(dt, dt1)
dt2 = date(2011, 10, 1)
for dt in get_month_dates_with_same_weekday(dt2):
check(dt, dt2)
rv = get_month_dates_with_same_weekday(dt2, date(2011, 10, 2))
assert len(rv) == 1 and rv[0] == dt2
rv = get_month_dates_with_same_weekday(dt2, date(2011, 10, 9))
assert len(rv) == 2 and rv[0] == dt2 and rv[1] == date(2011, 10, 8)