在AnQiCMS模板中轻松格式化时间戳:自定义日期时间显示指南

在网站运营中,内容发布时间、更新时间、评论时间等日期信息,是我们向访客传达信息的重要组成部分。很多时候,从数据库中获取到的时间数据通常是时间戳(一串数字),这对于用户来说并不直观。如何将这些原始的时间戳转化为易于阅读的日期时间格式,并根据页面设计灵活调整显示方式,是模板开发中经常遇到的需求。

AnQiCMS 为模板提供了非常实用且灵活的工具来解决这个问题,其中最核心的就是 stampToDate 标签。

认识 stampToDate 标签:时间戳的“魔法棒”

stampToDate 标签是 AnQiCMS 模板引擎内置的一个功能,专门用于将数字形式的时间戳转换成我们常见的日期时间字符串。它的使用方式简洁明了:

{{stampToDate(时间戳, "格式")}}

这里的关键在于两个部分:

  1. 时间戳: 这通常是一个 10 位的数字,代表从 Unix 纪元(1970年1月1日00:00:00 UTC)开始经过的秒数。在 AnQiCMS 的文档、评论、用户等数据中,例如 item.CreatedTime (创建时间)、item.UpdatedTime (更新时间) 等字段,返回的都是这种时间戳。

  2. 格式: 这是决定日期时间如何显示的关键。AnQiCMS 的模板引擎基于 Go 语言,其时间格式化方式非常独特。它不使用我们常见的如 Y-m-d H:i:s 这样的占位符,而是使用一个固定的参考时间 2006-01-02 15:04:05 来作为格式化的模板。

    理解这个参考时间至关重要:

    • 年份:2006 表示
    • 月份:01 (代表一月) 表示
    • 日期:02 (代表二号) 表示
    • 小时:15 (24小时制,代表下午三点) 表示
    • 分钟:04 (代表四分) 表示
    • 秒钟:05 (代表五秒) 表示
    • AM/PM:PMAM 表示(例如 3:04PM
    • 星期:Mon (星期一的缩写) 或 Monday (星期一全称) 表示

    当你想要某种日期时间格式时,只需用参考时间中对应的数字或字母来“拼写”出你想要的格式即可。

实际应用场景:AnQiCMS 数据中的时间戳

在 AnQiCMS 模板中,许多地方都会遇到需要格式化时间戳的情况。下面我们通过几个常见的例子来说明:

1. 文档列表或详情页中的创建/更新时间

无论是文章、产品还是其他自定义内容模型,它们的创建和更新时间都是以时间戳形式存储的。

示例代码:

{# 假设这是在一个文档列表的循环中,或者文档详情页直接获取 archive 对象 #}
<div>
    <span>发布日期:{{stampToDate(item.CreatedTime, "2006年01月02日")}}</span>
    <span>更新时间:{{stampToDate(item.UpdatedTime, "2006-01-02 15:04")}}</span>
</div>

{# 如果是在文档详情页直接调用当前文档的时间 #}
<div>
    <p>文章发布于:{{stampToDate(archive.CreatedTime, "2006/01/02")}}</p>
    <p>最后更新于:{{stampToDate(archive.UpdatedTime, "01-02 15:04:05")}}</p>
</div>

2. 评论列表中的评论时间

用户评论的时间也需要清晰地展示。

示例代码:

{# 假设这是在一个评论列表的循环中 #}
{% for comment in comments %}
    <div>
        <p>{{comment.UserName}} 于 {{stampToDate(comment.CreatedTime, "2006年1月2日 15:04")}} 评论:</p>
        <p>{{comment.Content}}</p>
    </div>
{% endfor %}

3. 用户信息中的登录/过期时间

在显示用户个人信息,例如上次登录时间或VIP会员过期时间时,格式化同样重要。

示例代码:

{# 假设这是在一个用户详情页 #}
{% userDetail userInfo with name="LastLogin" id="1" %}
{% userDetail vipExpire with name="ExpireTime" id="1" %}
<div>
    <p>上次登录:{{stampToDate(userInfo, "2006-01-02 15:04")}}</p>
    <p>VIP 到期:{{stampToDate(vipExpire, "2006年01月02日")}}</p>
</div>

灵活多样的格式化示例

掌握了 Go 语言的参考时间格式化规则,你就可以创造出各种你想要的日期时间显示效果。

你想显示的格式 stampToDate 的格式字符串 示例输出 (假设时间戳为 1609470335 即 2021年1月1日 11:05:35)
年-月-日 "2006-01-02" 2021-01-01
年月日 (中文) "2006年01月02日" 2021年01月01日
月/日/年 "01/02/2006" 01/01/2021
时:分 (24小时制) "15:04" 11:05
时:分:秒 (24小时制) "15:04:05" 11:05:35
时:分 AM/PM (12小时制) "3:04PM" 11:05AM
年-月-日 时:分 "2006-01-02 15:04" 2021-01-01 11:05
星期, 日 月 年 "Mon, 02 Jan 2006" Fri, 01 Jan 2021
完整日期时间 (带时区) "2006-01-02T15:04:05Z07:00" 2021-01-01T11:05:35Z+08:00

小贴士:

  • Go语言参考时间记忆法: 有一个简单的口诀可以帮助记忆 Go 语言的参考时间:“1月2日,3点4分5秒,2006年”。分别对应 01 (月), 02 (日), 03 (PM小时,也可记作 15 的24小时制), 04 (分), 05 (秒), 2006 (年)。
  • stampToDatedate 过滤器的区别: AnQiCMS 模板中还有一个 date 过滤器 ({{obj|date:"格式"}})。但请注意,date 过滤器仅适用于 Go 语言原生的 time.Time 类型的对象,而非直接的数字时间戳。对于 AnQiCMS 数据库中常见的 10 位时间戳,务必使用 stampToDate 标签进行格式化。

总结

stampToDate 标签是 AnQiCMS 模板中处理日期时间显示的核心工具。通过理解其基于 Go 语言参考时间的格式化机制,您可以轻松将原始时间戳转换为各种易于阅读和满足设计需求的日期时间格式,从而提升网站的用户体验和内容呈现的专业性。灵活运用这一标签,将使您的网站内容更加生动和人性化。


常见问题 (FAQ)

1. 为什么我在模板中直接使用 {{item.CreatedTime}} 却显示一串数字,而不是我想要的日期格式?

这是因为 item.CreatedTime 在 AnQiCMS 内部存储的是一个标准的 10 位 Unix 时间戳,它是一个纯数字。为了让它显示为我们常见的日期时间格式,您需要使用 stampToDate 标签