flask时间格式化
在前端显示为该问题 "几分钟前发表或几天前发表"
后端通过filter注册
设计需求
-
如果问题发表超过 10天 ,则显示为 %Y-%m-%d %H:%M
-
如果小于 10天 ,但是大于 1天 ,则显示为 n天前 发表
-
如果小于 1天 ,但是大于 1小时 ,则显示为 n小时前 发表
-
如果小于 1小时 ,但是大于 90秒 ,则显示为 n分钟前 发表
-
如果小于 90秒 ,则显示为 刚刚 发表
具体实现
通过 diff.days 和 diff.seconds 实现
比如,大于10天
1if diff.days > 10: 2 return dt.strftime('%Y-%m-%d %H:%M')
大于90秒,小于1小时
1if diff.seconds <= 3600 and diff.seconds > 90: 2 periods = ((diff.seconds / 60, "minute", "minutes"), )
具体代码
1def timesince(dt, default="just now"): 2 now = datetime.now() 3 diff = now - dt 4 if diff.days > 10: 5 return dt.strftime('%Y-%m-%d %H:%M') 6 if diff.days <= 10 and diff.days > 0: 7 periods = ((diff.days, "day", "days"), ) 8 if diff.days <= 0 and diff.seconds > 3600: 9 periods = ((diff.seconds / 3600, "hour", "hours"), ) 10 if diff.seconds <= 3600 and diff.seconds > 90: 11 periods = ((diff.seconds / 60, "minute", "minutes"), ) 12 if diff.seconds <= 90: 13 return default 14 15 for period, singular, plural in periods: 16 17 if period: 18 return "%d %s ago" % (period, singular if period == 1 else 19 plural) 20 21 return default
ok,之后就可以
1app.jinja_env.filters['timesince'] = timesince
来实现几分钟前发表的功能了
