Вычитать даты в Джанго? - PullRequest
       3

Вычитать даты в Джанго?

1 голос
/ 09 февраля 2011

У меня есть две переменные DateField, и я хотел бы вычесть их и вернуть разницу как количество месяцев до ближайшего месяцаКак я могу это сделать?

Спасибо за помощь!

Ответы [ 3 ]

5 голосов
/ 09 февраля 2011

Поля даты являются экземплярами datetime.date.Вы можете напрямую вычесть их, что даст вам timedelta .Вы можете получить доступ к числу дней, которые timedelta представляет через timedelta.days.Допустим, поле даты self.date установлено на два месяца назад:

today = datetime.date.today()
n = today - self.date
months = int(n.days/30)

должно указывать количество месяцев в этом случае 2. В зависимости от того, как вы определяете ближайший месяц, вам может потребоваться округление, а неприведение к int.

3 голосов
/ 09 февраля 2011

Для определенного ответа с использованием длин календарного месяца:

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
0 голосов
/ 21 ноября 2013
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...