Вы можете использовать modulo
арифметику c для этой задачи, но сначала вам нужно преобразовать число month
в значение, которое является действительным по модулю 12 (т.е. 0-11
), вычитая один из этого. Затем вы можете вычесть n
месяцев из этого значения, взять модуль и преобразовать его обратно в month
число, снова добавив 1:
today_date = date.today()
previous_month_4_start_date = today_date.replace(month=(today_date.month - 1 - 4) % 12 + 1, day=1)
print(previous_month_4_start_date)
Вывод (по состоянию на 2020-04-14
):
2020-12-01
Это не связано с тем, что год меняется, для этого необходимо сравнить текущий месяц с вычитаемым числом, а если он больше текущего месяца, также вычесть один из год:
previous_month_4_start_date = today_date.replace(year=today_date.year-1 if today_date.month <= 4 else today_date.year,
month=(today_date.month - 1 - 4) % 12 + 1,
day=1)
Вывод:
2019-12-01
Но
Это трудный способ сделать это. Простое решение - установить day
на 1
и затем использовать relativedelta
для вычитания 4 месяцев:
from datetime import date
from dateutil.relativedelta import relativedelta
today_date = date.today()
previous_month_4_start_date = today_date.replace(day = 1) - relativedelta(months = 4)
print(previous_month_4_start_date)
Вывод:
2019-12-01