Django内置timesince过滤器仅显示天数

1 投票
2 回答
3565 浏览
提问于 2025-04-18 13:48

我在我的模板中使用 {{ prospect.date_1 }} - ({{ prospect.date_1|timesince }} ago) 来获取某个日期距离现在的时间。

问题是,date_1 是一个 date 类型,而不是 datetime 类型,所以当我使用这个过滤器时,它给我的结果是:

2014年7月18日 - (11小时39分钟之前)

期望的输出

2014年7月18日 - (0天之前)

2 个回答

0

@Jack,你有没有试过用Python自带的功能呢:

可以看看这个链接:https://docs.python.org/2/library/datetime.html#datetime.datetime.day

还有这个链接也许对你有帮助:

https://docs.djangoproject.com/en/1.6/ref/contrib/humanize/#naturaltime

编辑:

from datetime import date
from datetime import datetime
d = date.today()
datetime.combine(d, datetime.min.time())
6

摘自 naturalday

@register.filter(expects_localtime=True)
def days_since(value, arg=None):
    try:
        tzinfo = getattr(value, 'tzinfo', None)
        value = date(value.year, value.month, value.day)
    except AttributeError:
        # Passed value wasn't a date object
        return value
    except ValueError:
        # Date arguments out of range
        return value
    today = datetime.now(tzinfo).date()
    delta = value - today
    if abs(delta.days) == 1:
        day_str = _("day")
    else:
        day_str = _("days")

    if delta.days < 1:
        fa_str = _("ago")
    else:
        fa_str = _("from now")

    return "%s %s %s" % (abs(delta.days), day_str, fa_str)

结果

>>> days_since(datetime.now())
'0 days ago'
>>> days_since(date(2013, 5, 12))
'432 days ago'
>>> days_since(date(2014, 12, 12))
'147 days from now'
>>> days_since(date(2014, 7, 19))
'1 day from now'

撰写回答