在Django中减去日期?

时间:2011-02-09 01:51:45

标签: python django

我有两个DateField变量,我想减去它们并将差异返回到最接近的月份的月份。我怎么能这样做?

感谢您的帮助!

3 个答案:

答案 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)