【问题标题】:Django built-in timesince filter to show only DaysDjango内置timesince过滤器仅显示Days
【发布时间】:2014-07-18 06:47:04
【问题描述】:

我在模板中使用{{ prospect.date_1 }} - ({{ prospect.date_1|timesince }} ago) 来获取自日期以来的时间。

关键是,date_1 是 date 而不是 datetime,所以当我应用过滤器时,它会告诉我

July 18, 2014 - (11 hours, 39 minutes ago)

预期输出

July 18, 2014 - (0 days ago)

【问题讨论】:

标签: python django django-template-filters


【解决方案1】:

取自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'

【讨论】:

  • @Jack 不客气。该答案中有一个小错误,请参阅我的编辑。
【解决方案2】:

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

【讨论】:

  • 请不要只提供链接答案。请尝试在这里用你的话解释问题:)
  • date_1 是一个日期对象。但让我试试看。
  • {{前景.date_1 }} -({{前景.date_1.day }}前)==== 2014 年 7 月 18 日 -(18 前)
  • 感谢@sundarnatarajСундар..:) 的建议..我以后会吃蛋糕的。
  • @Jack...您可以将日期对象转换为日期时间对象。我已经编辑了我的答案!
猜你喜欢
  • 2020-10-14
  • 2015-04-09
  • 2020-05-26
  • 1970-01-01
  • 2023-03-22
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多