2011-02-09 148 views
1

我有两个DateField变量,我想将它们相减并将差异作为月数返回到最近的月份。我该怎么做?在Django中减去日期?

感谢您的帮助!

+0

你的“月”之一有多长? – 2011-02-09 01:57:51

+0

一个月将是30天,谢谢。 – Andrew 2011-02-09 02:01:14

回答

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 
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。

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)