在前端显示为该问题 "几分钟前发表或几天前发表"
后端通过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
来实现几分钟前发表的功能了
知识共享署名-非商业性使用-相同方式共享4.0国际许可协议