Flask从入门到精通之Flask-Moment本地化日期和时间

  Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化、日期解析等功能。它支持在浏览器和NodeJS两种环境中运行。此类库能够 将给定的任意日期转换成多种不同的格式,具有强大的日期计算功能,同时也内置了能显示多样的日期形式的函数。Flask-Moment是一个集成moment.js到Jinja2模板的Flask扩展。安装Flask-Moment的方式如下:

pip install Flask-Moment

  初始化Flask-Moment

from flask.ext.moment import Moment
moment = Moment(app)

  除了moment.js,Flask-Moment 还依赖jquery.js。要在HTML 文档的某个地方引入这两个库,可以直接引入,这样可以选择使用哪个版本,也可使用扩展提供的辅助函数,从内容分发网络(Content Delivery Network,CDN)中引入通过测试的版本。Bootstrap 已经引入了jquery.js,因此只需引入moment.js 即可。下面展示了如何在基模板的scripts 块中引入这个库。

{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}

  为了处理时间戳,Flask-Moment 向模板开放了moment 类。下面例子中的代码把变量current_time 传入模板进行渲染。

from datetime import datetime
@app.route('/')
def index():
 return render_template('index.html',
current_time=datetime.utcnow())

  下面的例子展示了如何在模板中渲染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' 分别对应不同的复杂度。format() 函数还可接受自定义的格式说明符。第二行中的fromNow() 渲染相对时间戳,而且会随着时间的推移自动刷新显示的时间。这
个时间戳最开始显示为“a few seconds ago”,但指定refresh 参数后,其内容会随着时间的推移而更新。如果一直待在这个页面,几分钟后,会看到显示的文本变成“a minuteago”“2 minutes ago”等。

  Flask-Moment 实现了moment.js 中的format()、fromNow()、fromTime()、calendar()、valueOf()和unix() 方法。你可查阅文档(http://momentjs.com/docs/#/displaying/)学习moment.js 提供的全部格式化选项。

  Flask-Moment 渲染的时间戳可实现多种语言的本地化。语言可在模板中选择,把语言代码传给lang() 函数即可{{ moment.lang('es') }}。下面是常用的格式话参数:

YYYY 2014 年份
YY 14 2个字符表示的年份
Q 1..4 季度
M MM 4..04 月份
MMM MMMM 4月..四月 根据moment.locale()中的设置显示月份
D DD 1..31 一月中的第几天
Do 1日..31日 一月中的第几天
DDD DDDD 1..365 一年中的第几天
X 1410715640.579 时间戳
x 1410715640579 时间戳

  

  

  

posted @ 2018-01-29 10:36  木易森林  阅读(669)  评论(0编辑  收藏  举报