Python разность дать в кварталах
Как в Python найти разность дат в целых кварталах одной строкой кода? Например если даты внутри одного квартала - 01.01.2022 и 31.03.2022 то будет ноль, между 15.08.2022 и 30.10.2023 будет 5 и т. д.
Как в Python найти разность дат в целых кварталах одной строкой кода? Например если даты внутри одного квартала - 01.01.2022 и 31.03.2022 то будет ноль, между 15.08.2022 и 30.10.2023 будет 5 и т. д.
Здесь подойдёт dateutil
и relativedelta
, чтобы найти разность между датами в кварталах:
from dateutil.relativedelta import relativedelta
from dateutil.rrule import MO, TU, WE, TH, FR, SA, SU
date1 = ... # первая дата
date2 = ... # вторая дата
quarters = relativedelta(date2, date1).years * 4 + (relativedelta(date2, date1).months + 2) // 3
В этом коде мы сначала используем relativedelta
чтобы найти разность между датами в годах и месяцах, а затем вычисляем количество кварталов как произв.кол-ва лет на 4 и сумму кол-ва месяцев делённую на 3.
Накидаю еще варианты решения:
import datetime
date1 = datetime.datetime(2022,1,1)
date2 = datetime.datetime(2022,3,31)
quarters = (date2.year - date1.year) * 4 + (date2.month - date1.month) // 3
print(quarters)
или
import pandas as pd
date1 = pd.to_datetime("01.01.2022")
date2 = pd.to_datetime("31.03.2022")
quarters = (date2.year - date1.year) * 4 + (date2.quarter - date1.quarter)
print(quarters)
Дополняю ответ.
import datetime
date1 = datetime.datetime(2022,1,1)
date2 = datetime.datetime(2022,3,31)
quarters = date2.quarter - date1.quarter
print(quarters)
В этом коде мы сначала определяем квартал для каждой из дат с помощью метода quarter, а затем вычитаем одно число из другого.
Для даты 1.01.2022 будет возвращаться 1 (1 квартал) а для даты 31.03.2022 будет возвращаться 1 (1 квартал)
И результатом будет 0
И при датах 15.08.2022 и 30.10.2023 будет возвращаться результат 4-3=1.И так для любых дат будет вычисляться разница между номерами кварталов.
Можно еще через pandas, он даст тот же результат.
import pandas as pd
date1 = pd.to_datetime("01.01.2022")
date2 = pd.to_datetime("31.03.2022")
quarters = date2.to_period('Q')-date1.to_period('Q')
print(quarters)