Jika Anda hanya menginginkan hari apa saja dalam sebulan terakhir, hal paling sederhana yang dapat Anda lakukan adalah mengurangi jumlah hari dari tanggal sekarang, yang akan memberi Anda hari terakhir bulan sebelumnya.
Misalnya, dimulai dengan tanggal berapa pun:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2016, 5, 24)
Mengurangkan hari dari tanggal saat ini yang kita dapatkan:
>>> last_day_previous_month = today - datetime.timedelta(days=today.day)
>>> last_day_previous_month
datetime.date(2016, 4, 30)
Ini cukup untuk kebutuhan Anda yang disederhanakan setiap hari dalam sebulan terakhir.
Tetapi sekarang setelah Anda memilikinya, Anda juga bisa mendapatkan hari apa pun dalam sebulan, termasuk hari yang sama saat Anda memulai (yaitu kurang lebih sama dengan mengurangi satu bulan):
>>> same_day_last_month = last_day_previous_month.replace(day=today.day)
>>> same_day_last_month
datetime.date(2016, 4, 24)
Tentu saja, Anda perlu berhati-hati dengan tanggal 31 pada bulan 30 hari atau hari-hari yang hilang dari Februari (dan menjaga tahun kabisat), tetapi itu juga mudah dilakukan:
>>> a_date = datetime.date(2016, 3, 31)
>>> last_day_previous_month = a_date - datetime.timedelta(days=a_date.day)
>>> a_date_minus_month = (
... last_day_previous_month.replace(day=a_date.day)
... if a_date.day < last_day_previous_month.day
... else last_day_previous_month
... )
>>> a_date_minus_month
datetime.date(2016, 2, 29)
((date.month+delta-1) % 12)+1bekerja dan berartiif not m: m = 12bisa dihapus