使用 Moment.js
Moment.js 为浏览器提供了一个 moment
类。 呈现时间戳的第一步是创建此类的对象,并以 ISO 8601 格式传递所需的时间戳。 这里是一个例子:
t = moment('2017-09-28T21:45:23Z')
如果你对日期和时间不熟悉 ISO 8601 标准格式,格式如下: {{ year }}-{{ month }}-{{ day }}T{{ hour }}:{{ minute }}:{{ second }}{{ timezone }}
。 我已经决定我只使用 UTC 时区,因此最后一部分总是将会是 Z
,它表示 ISO 8601 标准中的 UTC。
moment
对象为不同的渲染选项提供了几种方法。 以下是一些最常见的几种:
moment('2017-09-28T21:45:23Z').format('L')
"09/28/2017"
moment('2017-09-28T21:45:23Z').format('LL')
"September 28, 2017"
moment('2017-09-28T21:45:23Z').format('LLL')
"September 28, 2017 2:45 PM"
moment('2017-09-28T21:45:23Z').format('LLLL')
"Thursday, September 28, 2017 2:45 PM"
moment('2017-09-28T21:45:23Z').format('dddd')
"Thursday"
moment('2017-09-28T21:45:23Z').fromNow()
"7 hours ago"
moment('2017-09-28T21:45:23Z').calendar()
"Today at 2:45 PM"
此示例创建了一个 moment 对象,该对象被初始化为 2017 年 9 月 28 日晚上 9:45 UTC。 你可以看到,我上面尝试的所有选项都以 UTC-7 时区来呈现,因为这是我计算机上配置的时区。你可以在 microblog 上进行此操作,只要你引入了 moment.js。或者你也可以在 https://momentjs.com/ 上尝试。
请注意不同的方法是如何创建的不同的表示。 使用 format()
,你可以控制字符串的输出格式,类似于 Python 中的 strftime 函数。 fromNow()
和 calendar()
方法很有趣,因为它们会根据当前时间显示时间戳,因此你可以获得诸如“一分钟前”或“两小时内”等输出。
如果你直接在 JavaScript 中运行,则上述调用将返回渲染后的时间戳字符串。 然后,你可以将此文本插入页面上的适当位置,不幸的是,这需要 JavaScript 与 DOM 配合使用。 Flask-Moment 插件通过启用一个类似于 JavaScript 上的 moment
对象,大大简化了对 moment.js 的使用,并融合了所需的 JavaScript 逻辑,使渲染后的时间展示在页面上。
我们来看看出现在个人主页中的时间戳。 当前的 user.html 模板使用 Python 生成时间的字符串表示。 现在我可以使用 Flask-Moment 渲染此时间戳,如下所示:
app/templates/user.html : 使用 moment.js 渲染时间戳。
{% if user.last_seen %}
<p>Last seen on: {{ moment(user.last_seen).format('LLL') }}</p>
{% endif %}
如你所见,Flask-Moment 使用的语法类似于 JavaScript 库的语法,其中一个区别是, moment()
的参数现在是 Python 的 datetime
对象,而不是 ISO 8601 字符串。 从模板发出的 moment()
调用也会自动生成所需的 JavaScript 代码,以将呈现的时间戳插入 DOM 的适当位置。
我可以利用 Flask-Moment 和 moment.js 的第二个地方是被主页和个人主页调用的 _post.html 子模板。 在该模板的当前版本中,每条用户动态都以“用户名说:”行开头。 现在我可以添加一个用 fromNow()
渲染的时间戳:
app/templates/_post.html : 在用户动态子模板中渲染时间戳。
<a href="{{ url_for('user', username=post.author.username) }}">
{{ post.author.username }}
</a>
said {{ moment(post.timestamp).fromNow() }}:
<br>
{{ post.body }}
下面,你可以看到这两个时间戳在 Flask-Moment 和 moment.js 的渲染下,表现如何:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论