在Django中如何比较日期?

3 投票
2 回答
6141 浏览
提问于 2025-04-16 14:09

我有一个Django模型类,其中有一个类变量 due_date

due_date = models.DateField()

我想在Django的管理后台显示这个对象是否到期,依据今天的日期来判断。

我的函数是这样的:

def is_due_today(self):
    dd = self.due_date
    today = datetime.date.now
    return dd - today > 0

但是我的输出结果是:

(None)

我哪里做错了呢?

2 个回答

2

today 应该是:

today = datetime.date.today()

把两个日期时间对象相减,会得到一个时间差。

>>> a - datetime.date.today()
datetime.timedelta(0)
>>> a = datetime.date.today()
>>> a - a
datetime.timedelta(0)
>>> a - a == 0
False
>>> 
>>> a - a == datetime.timedelta(0)
True

另外,如果你想检查某个东西今天是否到期,你的条件语句可能需要调整一下:

today - today isn't going to be > 0

如果你在检查是否过期:

return self.due_date < datetime.date.today()

检查今天是否到期:

return self.due_date == datetime.date.today()
6

在Python中,减去两个datetime对象会得到一个timedelta对象,这个对象不能直接和整数比较。不过,你可以从中获取类似total_seconds()的方法,来判断它是否不为零。

>>> now = datetime.datetime.now()
# wait 3 seconds
>>> now2 = datetime.datetime.now()
>>> td = now2 - now
>>> td.total_seconds()
3.266

所以在你的情况下,代码大概会像这样(未经测试):

def is_due_today(self):
    dd = self.due_date
    delta = dd - datetime.date.today()
    return delta.total_seconds() > 0

撰写回答