服务器需要统一时间单位,这与用户所在的地理位置(时区)无关,所以一般使用协调世界时(UTC,Coordinated Universal Time)。
对用户而言,会对 UTC 格式的时间感到困惑,更希望看到本地时间,而且采用当地所惯用的格式。
要想在服务器上只使用 UTC 时间,一个优雅的解决方案是,把时间单位发送给 web 浏览器,转换称当地时间,然后渲染。web 浏览器可以很好地完成这一任务,因为它能获取用户电脑中的时区和区域设置。
moment.js 一个使用 JavaScript 开发的优秀客户端开源代码库,可在浏览器中渲染日期和时间。flask-moment 是一个 flask 程序扩展,能把 moment.js 集成到 Jinja2 模板中。首先,进行 flask-moment 的安装:
pip install flask-moment
1. flask-moment 的初始化方法为:
from flask_moment import Moment
moment = Moment(app)
2. 基模板的修改
除了 moment.js,flask-moment 还依赖 jquery.js 。要在 html 文档的某个地方引入这两个库,可以直接引入,这样可以选择使用哪个版本,也可使用扩展提供的辅助函数,从内容分发网络(CDN,Content Delivery Network)中引入通过测试的版本。Bootstrap 已经引入了 jquery.js,因此只需引入 moment.js 即可,
如下代码展示了如何在基模板的 scripts 块中引入这个库:
{% block script %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}
3. 时间戳的处理
为了处理时间戳,flask-moment 向模板开放了 moment 类,
from datetime import datetime
@app.route('/')
def index():
return render_template('index.html', current_time=datetime.utcnow())
4. 在模板中渲染 current_time
<p>The local date and time is {{ moment(current_time).format('LLL') }}</p>
<p>That was {{ moment(current_time).fromNow(refresh=True) }}</p>
format(‘LLL’):根据客户端电脑中的时区和区域设置渲染日期和时间,参数决定了渲染的方式,’L’ 到 ‘LLLL’ 分别对应不同的复杂度。
5. 其他
flask-moment 实现了 moment.js 中的 format()、fromNow()、fromTime()、calendar()、valueOf()、unix()方法。具体可查阅文档 http://momentjs.com/docs/