网站内容更新频繁,每一篇文章、产品或评论都有其创建和更新的时间点。然而,这些时间通常以一串数字——也就是我们常说的时间戳——的形式存储在后台。直接显示这些时间戳对访问者来说并不友好,我们需要将它们转化为一目了然的日期和时间格式。

在 AnQiCMS 中,将这些时间戳格式化为我们习惯的日期和时间格式,其实非常简单直观。系统内置了一个功能强大的模板标签,可以帮助我们轻松实现这一点。

核心工具:stampToDate 标签

AnQiCMS 提供了一个名为 stampToDate 的模板标签,专门用于将 Unix 时间戳(通常是 10 位或 13 位的整数)转换为可读的日期和时间字符串。这个标签的用法非常灵活,它需要两个关键信息:

  1. 待格式化的时间戳: 这通常是您从数据库中获取的 CreatedTimeUpdatedTime 等字段。
  2. 格式化字符串: 这是定义您希望日期和时间显示为何种样式的关键。

它的基本语法是这样的:{{stampToDate(时间戳, "格式化字符串")}}

这里需要特别说明一下“格式化字符串”。AnQiCMS 基于 Go 语言开发,因此它遵循 Go 语言独特的时间格式化规则。与许多其他编程语言使用 Y-m-d H:i:s 这样的占位符不同,Go 语言使用一个特定的参考时间来作为模板:2006-01-02 15:04:05。您只需要记住这个参考时间,并根据您想要显示的格式,将参考时间中的对应部分替换成您期望的样式即可。

例如:

  • 如果您想显示 2023-10-26,那么格式化字符串就是 "2006-01-02"
  • 如果您想显示 2023年10月26日,那么格式化字符串就是 "2006年01月02日"
  • 如果您想显示 2023-10-26 14:30:15,那么格式化字符串就是 "2006-01-02 15:04:05"

实际应用场景

这个 stampToDate 标签在 AnQiCMS 的模板中随处可用。无论您是在显示文章列表、文章详情、用户最近登录时间还是评论发布时间,只要遇到时间戳字段,都可以用它来美化显示。

例如,在文章详情页(通常对应 archiveDetail 标签获取的数据)中显示文章的发布时间和更新时间:

<article>
    <h1>{{ archive.Title }}</h1>
    <p>
        <span>发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04")}}</span>
        <span>更新于:{{stampToDate(archive.UpdatedTime, "2006-01-02 15:04:05")}}</span>
    </p>
    <div>
        {{ archive.Content|safe }}
    </div>
</article>

在文章列表页(使用 archiveList 标签获取的数据)中,为每一篇文章显示其创建日期:

{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <li>
        <a href="{{item.Link}}">
            <h5>{{item.Title}}</h5>
            <p>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</p>
        </a>
    </li>
    {% empty %}
    <li>暂无文章内容。</li>
    {% endfor %}
{% endarchiveList %}

在评论列表中显示评论的发布时间:

{% commentList comments with archiveId=archive.Id type="list" limit="6" %}
    {% for item in comments %}
    <div>
        <span>{{item.UserName}}</span> 于 <span>{{stampToDate(item.CreatedTime, "2006年01月02日 15:04")}}</span> 评论道:
        <p>{{item.Content}}</p>
    </div>
    {% endfor %}
{% endcommentList %}

更灵活的格式定制

Go 语言的参考时间格式非常强大,您可以组合其中的元素,以满足各种复杂的日期时间显示需求:

  • 显示星期几: 使用 Mon (星期一的简写) 或 Monday (星期一的全称)。
    • 例如:"2006年01月02日 Monday" 将显示 2023年10月26日 Thursday
  • 显示上午/下午: 使用 PMpm
    • 例如:"15:04 PM" 将显示 02:30 PM (下午 2:30)。
  • 只显示月份和年份:
    • 例如:"2006年01月" 将显示 2023年10月

您可以根据需要,自由组合这些参考元素来创建独特的日期时间格式。

其他日期/时间相关标签和过滤器

除了 stampToDate,AnQiCMS 还提供了其他一些与日期时间相关的辅助功能:

  • 显示当前系统时间: 如果您需要在页面上显示当前服务器的时间,可以使用 {% now "格式化字符串" %} 标签。它同样遵循 Go 语言的格式化规则。
    
    <p>当前时间:{% now "2006年01月02日 15:04:05" %}</p>
    
  • date 过滤器: 对于已经是 Go 语言 time.Time 类型的变量,您也可以使用 date 过滤器进行格式化。不过请注意,date 过滤器仅适用于 time.Time 类型,直接对整数时间戳使用会导致错误。在 AnQiCMS 的模板中,大部分时间数据都是以时间戳形式提供,因此 stampToDate 是处理时间戳的首选方法。

总结来说,AnQiCMS 通过直观的 stampToDate 标签和 Go 语言灵活的参考时间格式,让网站内容的时间显示变得既简单又富有表现力。掌握这个小技巧,能让您的网站内容更具可读性和专业度。


常见问题 (FAQ)

1. 为什么 AnQiCMS 格式化日期时要用 “2006-01-02 15:04:05” 这样的数字组合作为格式化字符串?

这是 Go 语言特有的时间格式化方式。与许多编程语言使用符号(如 Y 代表年份,m 代表月份)不同,Go 语言提供了一个特定的参考时间 2006-01-02 15:04:05(也就是 1 月 2 日下午 3 点 4 分 5 秒,2006 年)作为格式化的“模板”。您只需在格式化字符串中,按照这个参考时间中各个数字所代表的意义,编写出您想要的显示格式,系统就会自动将其应用到实际的时间戳上。例如,想要显示完整的年份,就使用 2006

2. 如果我想显示星期几或者上午/下午,应该怎么设置格式?

要显示星期几,您可以使用参考时间中的 Mon(代表星期一的缩写)或 Monday(代表星期一的全称)。例如,"2006年01月02日 Monday" 会显示 `2023