Si tout ce que vous voulez est n'importe quel jour du mois dernier, la chose la plus simple que vous pouvez faire est de soustraire le nombre de jours de la date actuelle, ce qui vous donnera le dernier jour du mois précédent.
Par exemple, à partir de n'importe quelle date:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2016, 5, 24)
En soustrayant les jours de la date actuelle, nous obtenons:
>>> last_day_previous_month = today - datetime.timedelta(days=today.day)
>>> last_day_previous_month
datetime.date(2016, 4, 30)
Cela suffit pour votre besoin simplifié de n'importe quel jour du mois dernier.
Mais maintenant que vous l'avez, vous pouvez également obtenir n'importe quel jour du mois, y compris le même jour que vous avez commencé (c'est-à-dire plus ou moins la même chose que de soustraire un mois):
>>> same_day_last_month = last_day_previous_month.replace(day=today.day)
>>> same_day_last_month
datetime.date(2016, 4, 24)
Bien sûr, vous devez faire attention avec le 31e sur un mois de 30 jours ou les jours manquants à partir de février (et prendre soin des années bissextiles), mais c'est aussi facile à faire:
>>> 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)+1fonctionne et signifie que leif not m: m = 12peut être retiré