【问题标题】:Best way to accurately get the number of months between two dates spanning different years准确获取跨越不同年份的两个日期之间的月数的最佳方法
【发布时间】:2018-12-10 16:02:56
【问题描述】:

我需要能够准确地找到两个日期之间的月数,即使它们跨越不同的年份。我有从StackOverflow thread 得到的以下解决方案,但它在日期跨越不同年份时失败。

一年有效

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

因此,我的问题是,有没有比我目前拥有的更好的解决方案?

【问题讨论】:

    标签: python datetime relativedelta


    【解决方案1】:

    怎么样

    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
    

    【讨论】:

      猜你喜欢
      • 2011-05-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多