Python 计算两个日期之间的月份

Python 计算两个日期之间的月份,python,odoo,Python,Odoo,我需要计算两个日期之间的月份。我知道这很容易,但我有一个代码,我不能完成它 start_date=fields.Date(string="Startdate", requiered=True) end_date=fields.Date(string="End_date", requiered=True) duration=fields.Char(string="Duration", computer="_duration") @api.multi @api.depends('start

我需要计算两个日期之间的月份。我知道这很容易,但我有一个代码,我不能完成它

start_date=fields.Date(string="Startdate", requiered=True)

end_date=fields.Date(string="End_date", requiered=True)

duration=fields.Char(string="Duration", computer="_duration")

@api.multi 

@api.depends('start_date','end_date')

def _duration(self):

          if self.start_date and self.end_date:

               start_dt = fields.Datetime.from_string(self.start_date)

               finish_dt = fields.Datetime.from_string(self.end_date)

               difference = relativedelta(finish_dt, start_dt)

               month = difference.month
尝试使用此代码

from datetime import datetime


def diff_month(d1, d2):
return (d1.year - d2.year) * 12 + d1.month - d2.month
from datetime import datetime
from dateutil import relativedelta
date1 = datetime.strptime(str('2019-03-01'), '%Y-%m-%d')
date2 = datetime.strptime(str('2019-07-01'), '%Y-%m-%d')
r = relativedelta.relativedelta(date2, date1)
print(r.months)

试试这个代码

from datetime import datetime


def diff_month(d1, d2):
return (d1.year - d2.year) * 12 + d1.month - d2.month
from datetime import datetime
from dateutil import relativedelta
date1 = datetime.strptime(str('2019-03-01'), '%Y-%m-%d')
date2 = datetime.strptime(str('2019-07-01'), '%Y-%m-%d')
r = relativedelta.relativedelta(date2, date1)
print(r.months)

阅读以了解如何在Stackoverflow中提问。您的代码遇到了什么问题?它不起作用,我希望在减去月份后显示差异。例如2019年7月1日-2019年3月1日=4months@AZCHILENO试试我的第一个method@AZCHILENO在您的示例中,这两种方法似乎都是正确的,我必须将@api.multi@api.depends('start_date','end_date')放在def之前……?如果将@api.depends放在def之前,则将根据日期字段调用函数。如果函数依赖于日期字段,您可以添加@api.depends或使用onchange函数,那么我必须将@api.multi@api.depends('start_date','end_date')放在def date1之前…?是的,如果您需要根据dates@api.multi@api.depends('start_date','end_date')date1=datetime.strtime(str('2019-03-01')),“%Y-%m-%d”)date2=datetime.strtime(str('2019-07-01'),“%Y-%m-%d')r=relativedelta.relativedelta(date2,date1)打印(r.months)