在Django中如何计算日期差?

1 投票
3 回答
3136 浏览
提问于 2025-04-16 11:29

我有两个日期变量,我想把它们相减,得到它们之间的月份差,结果要四舍五入到最近的整月。请问我该怎么做呢?

谢谢大家的帮助!

3 个回答

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)
6

日期字段是 datetime.date 的实例。你可以直接对它们进行减法运算,这样会得到一个 时间差。你可以通过 timedelta.days 来获取这个时间差代表的天数。假设日期字段 self.date 设置为两个月前:

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

这样做应该会给你这个例子中的月份数,也就是 2。根据你如何定义最近的月份,你可能需要进行四舍五入,而不是直接转换成整数。

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

撰写回答