在网站内容运营中,时间的呈现方式往往被忽视,但它却是提升用户体验和内容专业度的重要细节。原始的时间戳数字对普通用户来说缺乏意义,将其格式化为清晰易读的日期时间格式,能让内容更具亲和力。安企CMS深知这一点,提供了简洁而强大的方式来处理这类需求。

理解安企CMS中的时间戳

在安企CMS中,无论是文章的发布时间(CreatedTime)还是更新时间(UpdatedTime),这些信息通常以时间戳的形式存储和传递。时间戳是一个表示从特定时刻(通常是Unix纪元,即1970年1月1日00:00:00 UTC)到某一时间点所经过的秒数。例如,您可能在模板中获取到一个形如 1609470335 的数字,这便是未经格式化的时间戳。直接显示这个数字,用户很难理解它代表的实际日期和时间。

核心功能:stampToDate 标签

安企CMS为了解决时间戳的可读性问题,提供了一个名为 stampToDate 的模板标签。这个标签的核心作用就是将原始的时间戳,根据您指定的格式,转换成人类友好的日期时间字符串。

它的基本使用方式非常直观: {{stampToDate(时间戳变量, "格式字符串")}}

这里有两个关键部分:

  1. 时间戳变量:这通常是从 archiveDetailarchiveList 或其他内容标签中获取到的 CreatedTimeUpdatedTime 等字段。
  2. 格式字符串:这是决定日期时间如何显示的关键。与许多CMS使用 Y-m-d H:i:s 这样的占位符不同,安企CMS的格式字符串遵循Go语言自身的特殊约定,即使用一个固定的参考日期时间来作为格式模板。这个参考日期时间是 2006-01-02 15:04:05。您只需按照您希望的输出格式来编写这个参考日期,系统便会智能地将实际时间戳格式化。

例如:

  • 如果您希望显示 年-月-日,格式字符串就写成 "2006-01-02"
  • 如果您希望显示 年/月/日,格式字符串就写成 "2006/01/02"
  • 如果您希望显示 月日,格式字符串就写成 "01-02"
  • 如果您希望显示 年-月-日 时:分:秒,格式字符串就写成 "2006-01-02 15:04:05"
  • 如果您希望显示 年时分,格式字符串就写成 "2006年15时04分"

通过这种方式,您几乎可以灵活地组合出任何您想要的日期时间格式。

实际应用示例

假设您正在制作文章列表页或文章详情页,并希望显示每篇文章的发布时间。

场景一:在文章列表中显示发布日期

archiveList 循环中,您可以这样使用 stampToDate 标签来格式化 CreatedTime

{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <li>
        <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
        <p>发布时间:<span>{{stampToDate(item.CreatedTime, "2006年01月02日")}}</span></p>
        <p>{{item.Description}}</p>
    </li>
    {% endfor %}
{% endarchiveList %}

这段代码会遍历文章列表,并为每篇文章显示其标题、链接、发布时间(例如 2023年10月27日)以及简介。

场景二:在文章详情页显示更新时间

在文章详情页中,您可能需要显示文章的更新时间,精确到分钟:

<article>
    <h1>{% archiveDetail with name="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>
        {%- archiveDetail articleContent with name="Content" %}
        {{articleContent|safe}}
    </div>
</article>

这里我们使用了 archive.CreatedTimearchive.UpdatedTime(在文档详情页中,archive 变量通常代表当前文档对象),并分别用 2006-01-02 15:042006-01-02 15:04:05 进行了格式化。

实用技巧与注意事项

  • 保持一致性:在整个网站中,尽量保持日期时间格式的一致性,这有助于提升用户体验和网站的专业形象。
  • 考虑目标受众:如果您的网站有国际受众,可以考虑使用更通用的日期格式(如 YYYY-MM-DD)或根据语言包切换不同的格式。
  • Go语言格式字符串的记忆:一开始可能会觉得 2006-01-02 15:04:05 难以记忆,您可以将其看作是一个特殊的“魔法日期”,记住它每个数字和符号代表的含义即可。例如:
    • 2006 -> 年 (Year)
    • 01 -> 月 (Month)
    • 02 -> 日 (Day)
    • 15 -> 小时 (Hour, 24小时制)
    • 04 -> 分钟 (Minute)
    • 05 -> 秒 (Second)

通过掌握 stampToDate 标签的使用,您可以轻松地将安企CMS中的时间戳数据转化为用户一目了然的日期时间信息,让您的网站内容更加专业、更易读。


常见问题解答 (FAQ)

1. 为什么格式字符串要用 2006-01-02 15:04:05 这样的特定数字组合,而不是 YYYY-MM-DD 这样的通用占位符?

这是因为安企CMS基于Go语言开发,而Go语言在格式化日期时间时,采用了一个固定不变的参考时间 2006-01-02 15:04:05 -0700 MST(常被称为“魔法时间”),其中每个数字和缩写都对应着特定的时间单位(例如 2006 代表年份,01 代表月份等)。您只需将您期望的输出格式套用到这个参考时间上,系统就会自动完成转换,这是一种Go语言独有的简洁高效的格式定义方式。

2. 如果我只想显示时间,例如 10:30,应该如何设置格式字符串?

如果您只想显示时间,可以直接使用参考时间中的时间部分来构建格式字符串。例如,如果您想显示 时:分,格式字符串可以设置为 "15:04"。如果您希望显示 时:分:秒,则使用 "15:04:05"

3. stampToDate 标签是否支持所有时区转换?

stampToDate 标签主要负责将时间戳转换为指定格式的字符串。默认情况下,它会根据服务器设置的时区进行转换。如果您需要针对不同用户显示不同时区的时间,这通常需要在后端逻辑中处理时间戳的时区转换,或者确保服务器的时区设置符合您的主要受众需求。模板标签本身不提供直接的时区转换参数,它侧重于格式化已有时区的时间戳。