我有两个DateField变量,我想减去它们并将差异返回到最接近的月份的月份。我怎么能这样做?
感谢您的帮助!
答案 0 :(得分:5)
Datefields是datetime.date实例。您可以直接减去它们,这将为您提供timedelta。您可以通过timedelta.days访问timedelta表示的天数。让我们说datefield self.date设置为两个月前:
today = datetime.date.today()
n = today - self.date
months = int(n.days/30)
在这种情况下,应该给你几个月的数量2.根据你如何定义最接近的月份,你可能需要进行舍入而不是转换为int。
答案 1 :(得分:3)
对于使用日历月长度的明确答案:
months = lambda a, b: abs((a.year - b.year) * 12 + a.month - b.month)
示例:
>>> import datetime
>>> a = datetime.date(2011, 2, 8)
>>> b = datetime.date(2010, 5, 14)
>>> months(a, b)
9
编辑,如果你想根据天数进行舍入:
months = lambda a, b: abs((a.year - b.year) * 12 + a.month - b.month) + int(abs(a.day - b.day) > 15)
示例:
>>> import datetime
>>> a = datetime.date(2011, 2, 8)
>>> b = datetime.date(2010, 5, 14)
>>> months(a, b)
9
>>> b = datetime.date(2010, 5, 30)
>>> months(a, b)
10
答案 2 :(得分:0)
def date_diff:
now = datetime.now().date()
s=seo_job.job_end_date.replace(hour=23,minute=59,second=59).date()
#seo_job.job_end_date an end date that is saved in db
return (now-s)