Если вы хотите всего один день за последний месяц, то самое простое, что вы можете сделать вычитает количество дней с текущей даты, которое даст вам последний день предыдущего месяца.
Например, начиная с любой даты:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2016, 5, 24)
Вычитая дни текущей даты мы получим:
>>> last_day_previous_month = today - datetime.timedelta(days=today.day)
>>> last_day_previous_month
datetime.date(2016, 4, 30)
Этого достаточно для упрощенной необходимости в любой день в прошлом месяце ,
Но теперь, когда у вас есть, вы можете также получить в любой день в течение месяца, в том числе и в тот же день вы начали (т.е. более или менее такие же, как вычитание месяца):
>>> same_day_last_month = last_day_previous_month.replace(day=today.day)
>>> same_day_last_month
datetime.date(2016, 4, 24)
Конечно , вам нужно быть осторожным с 31 по 30 день месяца в или дни без вести с февраля (и заботиться о високосных лет), но это также легко сделать:
>>> 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)
Отличная работа! Это может мне очень помочь. –