flask时间格式化


在前端显示为该问题 "几分钟前发表或几天前发表"

后端通过filter注册

参考资料

设计需求

  • 如果问题发表超过 10天 ,则显示为 /%Y-%m-%d %H:%M/
  • 如果小于 10天 ,但是大于 1天 ,则显示为 /n天前/ 发表
  • 如果小于 1天 ,但是大于 1小时 ,则显示为 /n小时前/ 发表
  • 如果小于 1小时 ,但是大于 90秒 ,则显示为 /n分钟前/ 发表
  • 如果小于 90秒 ,则显示为 /刚刚/ 发表

具体实现

通过 `diff.days` 和 `diff.seconds` 实现

比如,大于10天

if diff.days > 10:
    return dt.strftime('%Y-%m-%d %H:%M')

大于90秒,小于1小时

if diff.seconds <= 3600 and diff.seconds > 90:
    periods = ((diff.seconds / 60, "minute", "minutes"), )

具体代码

def timesince(dt, default="just now"):
    now = datetime.now()
    diff = now - dt
    if diff.days > 10:
        return dt.strftime('%Y-%m-%d %H:%M')
    if diff.days <= 10 and diff.days > 0:
        periods = ((diff.days, "day", "days"), )
    if diff.days <= 0 and diff.seconds > 3600:
        periods = ((diff.seconds / 3600, "hour", "hours"), )
    if diff.seconds <= 3600 and diff.seconds > 90:
        periods = ((diff.seconds / 60, "minute", "minutes"), )
    if diff.seconds <= 90:
        return default

    for period, singular, plural in periods:

        if period:
            return "%d %s ago" % (period, singular if period == 1 else
                                    plural)

    return default

ok,之后就可以

app.jinja_env.filters['timesince'] = timesince

来实现几分钟前发表的功能了

作者: honmaple
链接: https://honmaple.me/articles/2016/06/flask时间格式化.html
版权: 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat