在安企CMS中管理网站内容时,我们经常会遇到需要展示日期和时间的情况。然而,后台数据库里存储的这些时间信息,通常以时间戳(timestamp)的形式存在,这对于机器处理来说非常高效,但对用户而言却难以直接阅读。例如,你可能会看到一串像 1609470335 这样的数字,它代表的是某个特定时刻,但我们希望它能显示为“2021年1月1日 12:25:35”这种更友好的格式。

幸运的是,安企CMS充分考虑了这种需求,提供了一个非常便捷且强大的模板标签,帮助我们轻松将后台的时间戳数据转换为易于理解的日期和时间格式。

认识核心工具:stampToDate 标签

安企CMS的模板系统内置了一个名为 stampToDate 的标签,专门用于处理时间戳的格式化显示。它的基本用法非常直观:

{{ stampToDate(时间戳变量, "格式字符串") }}

这里的“时间戳变量”就是你从后台获取到的那串数字(通常是10位数字的Unix时间戳),而“格式字符串”则是你希望日期时间呈现的样式。

一个重要的概念需要理解:安企CMS的格式字符串遵循Go语言的时间格式化标准。Go语言使用一个固定的参考日期 2006-01-02 15:04:05 来作为格式化的模板。这意味着,如果你想显示年份,就使用 2006;想显示月份,就使用 01;想显示日期,就使用 02,以此类推。这初看起来可能有点反直觉,但一旦掌握,你会发现它非常灵活。

常用日期和时间格式示例

为了帮助你更好地理解和运用,我们来看几个常见的格式化例子,假设我们的时间戳变量是 item.CreatedTime,其值为 1609470335(即2021年1月1日 12:25:35):

  1. 仅显示日期(年-月-日) 如果你只关心文章的发布日期,不希望看到具体时间,可以使用以下格式:

    {{ stampToDate(item.CreatedTime, "2006-01-02") }}
    {# 输出: 2021-01-01 #}
    
  2. 显示完整日期和时间 如果需要精确到秒,可以使用:

    {{ stampToDate(item.CreatedTime, "2006-01-02 15:04:05") }}
    {# 输出: 2021-01-01 12:25:35 #}
    
  3. 自定义中文格式 对于中文网站,我们可能希望显示“年、月、日”字样:

    {{ stampToDate(item.CreatedTime, "2006年01月02日 15时04分") }}
    {# 输出: 2021年01月01日 12时25分 #}
    
  4. 其他常见格式 你也可以根据需要组合出各种格式:

    • 显示月份和日期:{{ stampToDate(item.CreatedTime, "01-02") }} (输出: 01-01)
    • 显示时间(小时:分钟):{{ stampToDate(item.CreatedTime, "15:04") }} (输出: 12:25)
    • 显示星期几:{{ stampToDate(item.CreatedTime, "Mon") }}{{ stampToDate(item.CreatedTime, "Monday") }} (输出: Fri 或 Friday)
    • 显示带有AM/PM的时间:{{ stampToDate(item.CreatedTime, "3:04PM") }} (输出: 12:25PM)

关键在于,记住 2006-01-02 15:04:05 这个参考日期中的每个数字和符号代表什么,然后用你希望的实际字符去替换它。例如,你想显示年份,就写 2006;想显示一个连字符 -,就写 -

在安企CMS中哪里会用到时间戳?

安企CMS的后台在很多地方都会存储时间戳数据,例如:

  • 文章/文档管理:文章的发布时间 (CreatedTime) 和更新时间 (UpdatedTime)。
  • 评论管理:评论的发布时间 (CreatedTime)。
  • 用户管理:用户的最后登录时间 (LastLogin) 和VIP过期时间 (ExpireTime)。

这些时间戳通常会作为循环中的 item 对象的属性,或者在详情页中作为当前对象的属性被传递到模板中。例如,在文章列表循环中,你会使用 {{item.CreatedTime}} 来获取每篇文章的发布时间戳。

实际应用场景:格式化文章列表的发布时间

假设你正在编辑文章列表模板(例如 /template/default/archive/list.html),并希望显示每篇文章的发布日期:

{# 假设这里是文章列表循环的开始 #}
{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <li>
        <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
        <div>
            {# 这里是格式化时间戳的关键 #}
            <span>发布日期:{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</span>
            <span>浏览量:{{item.Views}} 次</span>
        </div>
        <p>{{item.Description}}</p>
    </li>
    {% empty %}
    <li>暂无文章内容。</li>
    {% endfor %}
{% endarchiveList %}
{# 假设这里是文章列表循环的结束 #}

通过这一行简单的代码,所有文章的时间戳都会被自动转换成“XXXX年XX月XX日”的易读格式,极大提升了网站的用户体验。

总结

将后台的时间戳数据转换为可读的日期和时间格式,是内容运营中一项基本但重要的任务。安企CMS提供的 stampToDate 标签,通过其灵活的Go语言格式化机制,让这一过程变得简单高效。只要记住那个神奇的 2006-01-02 15:04:05 参考日期,你就可以随心所欲地定制任何你想要的日期时间显示格式,让你的网站内容更加贴近用户。

常见问题 (FAQ)

1. 为什么格式化字符串是 2006-01-02 15:04:05 这样的数字组合,而不是常见的 YYYY-MM-DD

这是Go语言(安企CMS的底层开发语言)特有的时间格式化约定。它不是简单的占位符,而是Go语言诞生之初选择的一个特定日期和时间作为“参考模板”。当你提供 2006-01-02 15:04:05 时,Go语言会根据这个模板的结构,将你的时间戳转换为对应的日期和时间部分。所以,如果你想显示年份,就写 2006;如果想显示具体的月、日、时、分、秒,就分别用 0102150405 作为模板。这种方式虽然初次接触需要适应,但一旦理解其逻辑,会发现它非常灵活和精确。

2. 我可以直接使用 date 过滤器来格式化时间戳吗?

不建议直接使用 date 过滤器来格式化时间戳。安企CMS模板中提供了一个 date 过滤器,但它期望的输入是一个Go语言的 time.Time 类型对象,而不是原始的Unix时间戳数字。如果直接对时间戳使用 date 过滤器,可能会导致错误或不符合预期的结果。因此,对于后台获取到的时间戳数据,请务必使用专门的 stampToDate 标签进行格式