在Django中如何计算日期差?
我有两个日期变量,我想把它们相减,得到它们之间的月份差,结果要四舍五入到最近的整月。请问我该怎么做呢?
谢谢大家的帮助!
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