如何以某种格式显示日期时间字段

时间:2018-10-13 19:13:22

标签: django django-views jinja2

我有一个datetime字段列,用于我的详细信息视图模板。我在HTML页面中将其显示为:{{ post.created_at }},输出为:July 15, 2018, 7:03 p.m,这比我需要的要冗长。

我想要以下内容:

  • 如果我在59分钟前发布了一条帖子,则该帖子应显示为59m
  • 如果我23个小时前发布了一条帖子,则该帖子应显示为23h
  • 如果我在6天前发布了一条帖子,则该帖子应显示为6d
  • 现在,超过一周时间的任何内容都应显示为日,月,年。在上面的示例中,它应该是:15 Jul 18,没有时间。

是否可以使用Jinja在HTML页面中完成此操作?

1 个答案:

答案 0 :(得分:1)

您可以为此使用自定义过滤器。我使用如下所示的一种。它的格式不完全符合您的规范,但是您会明白的:

{{ value|format_date_human(locale='en') }}

def format_date_human(to_format, locale='en', timezoneinfo='Asia/Calcutta'):
    tzinfo = timezone(timezoneinfo)
    now = datetime.now()
    #logging.info('delta: %s', str((now - to_format).days))
    #logging.info('delta2: %s', str((datetime.date(now)-datetime.date(to_format)).days))

    if datetime.date(to_format) == datetime.date(now):
        date_str = _('Today')
    elif (now - to_format).days == 1:
        date_str = _('Yesterday')
    else:
        month = MONTHS[to_format.month - 1]
        date_str = '{0} {1}'.format(to_format.day, _(month))
    time_str = format_time(to_format, 'H:mm', tzinfo=tzinfo, locale=locale)
    return "{0}".format(date_str, time_str)