Flask中日期时间的简单处理

本文介绍了在Flask应用中处理日期时间的方法,通过使用Flask-Moment扩展结合Moment.js库,实现在Web浏览器中将服务器的UTC时间转换为用户的当地时间并按当地格式显示。在服务器端,我们统一使用UTC时间,然后在前端利用Moment.js进行时间的本地化渲染,确保用户体验。Flask-Moment提供了多种时间格式化方法,并支持多语言本地化设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要用

服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调世界时(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') }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值