Wenn Sie nur einen Tag im letzten Monat wünschen, können Sie am einfachsten die Anzahl der Tage vom aktuellen Datum abziehen, um den letzten Tag des Vormonats zu erhalten.
Zum Beispiel beginnend mit einem beliebigen Datum:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2016, 5, 24)
Wenn wir die Tage des aktuellen Datums abziehen, erhalten wir:
>>> last_day_previous_month = today - datetime.timedelta(days=today.day)
>>> last_day_previous_month
datetime.date(2016, 4, 30)
Dies reicht für Ihren vereinfachten Bedarf an jedem Tag im letzten Monat.
Aber jetzt, wo Sie es haben, können Sie auch jeden Tag im Monat erhalten, einschließlich des gleichen Tages, mit dem Sie begonnen haben (dh mehr oder weniger das gleiche wie das Subtrahieren eines Monats):
>>> same_day_last_month = last_day_previous_month.replace(day=today.day)
>>> same_day_last_month
datetime.date(2016, 4, 24)
Natürlich müssen Sie mit dem 31. an einem 30-Tage-Monat oder den ab Februar fehlenden Tagen vorsichtig sein (und sich um Schaltjahre kümmern), aber das ist auch einfach zu tun:
>>> 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)+1funktioniert es und bedeutet, dass dieif not m: m = 12Dose entfernt werden kann