Python разность дать в кварталах

Рейтинг: 0Ответов: 1Опубликовано: 26.01.2023

Как в Python найти разность дат в целых кварталах одной строкой кода? Например если даты внутри одного квартала - 01.01.2022 и 31.03.2022 то будет ноль, между 15.08.2022 и 30.10.2023 будет 5 и т. д.

Ответы

▲ 0

Здесь подойдёт 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)