
2.4 使用Flask-Moment扩展本地化处理日期和时间

Flask-Moment是一个比较常用的Flask扩展,功能是将日期处理类库moment.js集成到Jinja2模板中。在本节的内容中,将详细讲解使用Flask-Moment扩展本地化日期和时间的知识。
2.4.1 Flask-Moment基础
Moment.js是一个轻量级的JavaScript日期处理类库。开发者可以在浏览器和NodeJS两种环境中运行Moment.js,通过使用类库Moment.js可以实现如下所示的功能。
• 将指定的任意日期转换成多种不同的显示格式。
• 实现常用的日期计算功能,例如在两个日期之间相差多少天。
• 内置了能够显示各种日期格式的函数。
• 支持多种语言,开发者可以选择或者新增一种语言包。
Flask-Moment是一个Flask扩展,例如下面是初始化Flask-Moment的演示代码。

安装Flask-Moment的指令如下所示。

因为Flask-Moment扩展依赖两个JS文件:moment.js和jquery.js,所以在使用Flask-Moment时需要将这两个JS文件包含在HTML文档中。例如通过如下所示的代码,可以在模板文件base.html中的<head>标签中导入moment.js和jquery.js。

注意:因为在Bootstrap中包含了jquery.js,所以如果已经在Flask Web项目中使用了Bootstrap,那么可以不用再导入jquery.js。
2.4.2 使用Flask-Moment显示时间
在下面的实例中,演示了在Flask Web程序中使用Flask-Moment扩展的过程,在本实例中还实现了错误处理功能。
源码路径:daima\2\2-4\flasky3e\
1)编写程序文件hello.py,为了处理时间戳,Flask-Moment向模板开放了moment类,把变量current_time传入模板进行渲染,具体实现代码如下所示。

2)在模板文件index.html中,使用Flask-Moment扩展设置使用指定的格式显示时间,具体实现代码如下所示。

• format('LLL'):功能是根据客户端计算机中的时区和区域设置渲染日期和时间。参数LLL设置了渲染的方式,其中L到LLLL分别对应不同的复杂度。
• fromNow(refresh=True):功能是显示当前时间,随着时间的推移自动刷新显示当前时间。最开始显示为“a few seconds ago”,在设置参数refresh后,其会随着时间的推移而及时更新。如果一直浏览这个页面而不关闭,在几分钟后会看到文本内容变成“这是40 minutes ago”之类的提示文本。
在浏览器中输入“http://127.0.0.1:5000/”执行后的效果如图2-7所示。

图2-7 显示本地化时间