pythonで指定した期間の毎月1日を取得

はい、複数月のデータを取るときに、SQL一発でやっていましたが、
月を指定してループで回す方が可読性あがるよね、ということで、
python側で月をループで取るようにしたサンプルです。


import datetime

def month_range(start_date: date, end_date: date):
m = start_date
while m < end_date:
yield m.replace(day=1)
m = (m.replace(day=1) + timedelta(31)).replace(day=1)


def main():

for m in month_range(datetime.date(2019, 1, 1), datetime.date.today()):
print m


こんな感じにすると、
・貰ったスタートの日付を一旦その月の1日に変換、yieldで返す
・次はそこに31日を足して、その月の1日に変換、yieldで返す
・・・

となります。

timedeltaは月の加算減産は出来ないそうで。
やりたいならサードパーティのライブラリを使う、という手もあるっポイです。
https://python.civic-apps.com/add-month-relativedelta/


参考:
https://www.sejuku.net/blog/23716
https://python.civic-apps.com/timedelta/