您的位置:首页 > 其它

Flask中日期时间的简单处理

2016-08-12 22:07 176 查看

为什么要用

服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调世界时(UTC),但用户更希望看到当地时间,而且采用当地惯用的格式

要想在服务器上只使用UTC,可以把时间单位发给Web浏览器,然后转换成当地时间并渲染

有个JS的日期处理类库
Moment.js
,它可以在浏览器中渲染日期和时间,Flask-Moment拓展集成了
moment.js
到Jinja2模板中,该拓展还依赖
jquery.js
,不过已经在上文的Bootstrap中引入了,无需再引

如何用

先安装:

pip install flask-moment


初始化:

from flask_moment import Moment
moment = Moment(app)


在base模板的scripts块中引入这个库:

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


处理时间戳,把变量
current_time
传入模板进行渲染:

from datetime import datetime

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


接下来在模板(index.html)中渲染current_time:

{% extends "base.html" %}
{% block title %}首屋{% endblock %}

{% block page_content %}
<h1>这里是一切的起点</h1>
<h2>现在时刻:{{ moment(cur_time).format('LLL') }}</h2>
{% endblock %}


format('LLL')
根据客户端的时区和区域设置渲染日期时间,参数’L’到’LLLL’分别对应不同的复杂度,
format()
函数还可接受自定义的格式说明符:

举个栗子,传入时间变量(出生年月)到渲染模板:

from flask import render_template
from datetime import date
@main.route('/')
def index ():
return render_template('index.html', time = date(1995,7,1))


然后在模板中渲染,通过
fromTime()
获得差值,即年龄

<h2>现在时刻:{{ moment().format('L') }}</h2>
<h2>已经度过:{{ (moment(time).fromNow(true))}}</h2>


运行:



fromNow()
指定
refresh
参数后,其内容会随着时间的推移而更新

Flask-Moment实现了
moment.js
中的
format()
fromNow()
fromTime()
calendar()
valueOf()
unix()
方法,具体看Moments.js文档

Flask-Moment渲染的时间戳可实现多种语言的本地化,语言可在模板scripts块中设置,改为中文格式:

{{ moment.lang('zh-cn') }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: