2011-02-09 132 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)