如何比较Django中的日期?

时间:2011-03-22 00:26:47

标签: python django

我有一个带有类变量due_date的Django模型类:

due_date = models.DateField()

如果对象是根据今天的日期到期,我想在Django管理员中输出。

我的功能如下:

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

但我的输出是:

(None)

我做错了什么?

2 个答案:

答案 0 :(得分:5)

在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

答案 1 :(得分:2)

today应该是:

today = datetime.date.today()

减去两个日期时间日期对象会为您提供timedelta。

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