Лучший способ точно определить количество месяцев между двумя датами, охватывающими разные годы - PullRequest
0 голосов
/ 10 декабря 2018

Мне необходимо точно определить количество месяцев между двумя датами, даже если они охватывают разные годы.У меня есть решение ниже, которое я получил из этого потока StackOverflow , но оно терпит неудачу, когда даты охватывают разные годы.

работает, когда оно охватывает один год

from datetime import datetime
from dateutil.relativedelta import relativedelta

date1 = datetime.strptime('2010-01-01', '%Y-%m-%d')
date2 = datetime.strptime('2010-12-01', '%Y-%m-%d')
diff = relativedelta(date2, date1)
number_of_months = diff.months
print(number_of_months) # 11

терпит неудачу, когда он охватывает несколько лет

from datetime import datetime
from dateutil.relativedelta import relativedelta

date1 = datetime.strptime('2010-01-01', '%Y-%m-%d')
date2 = datetime.strptime('2012-02-01', '%Y-%m-%d')
diff = relativedelta(date2, date1)
number_of_months = diff.months
print(number_of_months) # 1

В свете этого я рассмотрел следующее решение:

from datetime import datetime
from dateutil.relativedelta import relativedelta


def month_diff(date1, date2):
    if date1.year == date2.year:
        diff = relativedelta(date2, date1)
        number_of_months = diff.months
    else:
        num_of_days = (date2 - date1).days
        number_of_months = num_of_days//30
    print(number_of_months)


date1 = datetime.strptime('2010-01-01', '%Y-%m-%d')
date2 = datetime.strptime('2010-12-01', '%Y-%m-%d')

date3 = datetime.strptime('2010-01-01', '%Y-%m-%d')
date4 = datetime.strptime('2012-02-01', '%Y-%m-%d')

month_diff(date1, date2) # 11
month_diff(date3, date4)  # 25

Поэтому мой вопрос заключается в том, есть ли лучшее решение, чем то, что яв настоящее время есть?

1 Ответ

0 голосов
/ 10 декабря 2018

А как же

from datetime import datetime
from dateutil.relativedelta import relativedelta

date1 = datetime.strptime('2010-01-01', '%Y-%m-%d')
date2 = datetime.strptime('2012-02-01', '%Y-%m-%d')
diff = relativedelta(date2, date1)
number_of_months = 12 * diff.years + diff.months
...