在网站内容运营中,时间信息扮演着不可或缺的角色。无论是文章的发布时间、产品的上架日期,还是评论的提交时间,清晰、易读的日期时间格式都能极大提升用户体验。安企CMS作为一个高效的内容管理系统,充分考虑了这一点,提供了灵活的方式来格式化和显示这些时间戳数据。

理解安企CMS中的时间戳

在安企CMS的后台,当我们发布文章、产品或进行其他内容管理操作时,系统通常会将这些事件的时间记录为一个“时间戳”。简单来说,时间戳是一串数字,代表从某个特定时刻(通常是Unix纪元,即1970年1月1日00:00:00 UTC)到该事件发生时的秒数。虽然它便于系统存储和计算,但对于访客来说,这串数字是难以理解的。

因此,我们需要在前端模板中将这些时间戳转换为人们熟悉的日期时间格式,例如“2023年10月27日 14:30:00”或“今天上午”。

核心工具:stampToDate 标签

安企CMS在模板中提供了一个非常实用的内置标签,叫做stampToDate,专门用于将10位的时间戳格式化为可读的日期时间字符串。它的使用方式直观简洁,只需要传入两个参数:您要格式化的时间戳,以及您期望的日期时间格式。

基本语法是这样的: {{stampToDate(您的时间戳, "您想要的格式")}}

这里的“您的时间戳”通常是您从archiveListarchiveDetailcommentList等标签中获取到的内容的CreatedTimeUpdatedTime等字段。

掌握Go语言的时间格式化规则

理解stampToDate标签的关键在于理解其“您想要的格式”参数。安企CMS是基于Go语言开发的,因此它遵循Go语言特有的时间格式化规则。不同于常见的Y-m-d H:i:s这种直接表示的格式,Go语言采用了一种独特的参考时间来定义日期时间格式。

这个参考时间是固定的:2006年01月02日15点04分05秒 -0700 MST

您不需要记住所有这些数字背后的含义,只需记住这个日期,然后根据您希望的显示效果,将这个参考时间中的对应数字或单词替换成您想要的格式分隔符即可。

例如:

  • 如果您想显示年份,就写2006
  • 如果您想显示月份(带前导零),就写01
  • 如果您想显示日期(带前导零),就写02
  • 如果您想显示24小时制的小时(带前导零),就写15
  • 如果您想显示分钟(带前导零),就写04
  • 如果您想显示秒数(带前导零),就写05
  • 如果您想显示星期几的完整名称,就写Monday;如果只显示缩写,就写Mon

一些常见格式的示例:

您想显示的格式 Go语言格式化字符串 示例输出
年-月-日 2006-01-02 2023-10-27
年月日(中文) 2006年01月02日 2023年10月27日
年/月/日 时:分 2006/01/02 15:04 2023/10/27 14:30
月/日 时:分:秒 01/02 15:04:05 10/27 14:30:00
星期几,年 月 日 Mon, 02 Jan 2006 Fri, 27 Oct 2023
上午/下午 时:分 03:04PM3:04 PM 02:30PM
精确到毫秒(或更多) 2006-01-02 15:04:05.000 2023-10-27 14:30:00.123

实际应用:在模板中格式化时间

当您需要显示文章的发布时间或更新时间时,通常会在archiveListarchiveDetail标签的循环体内使用stampToDate

例如,在文档详情页中显示发布和更新时间:

<article>
    <h1>{{archive.Title}}</h1>
    <div>
        发布时间:<span>{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04:05")}}</span>
        {% if archive.CreatedTime != archive.UpdatedTime %}
        <span>更新时间:{{stampToDate(archive.UpdatedTime, "2006年01月02日 15:04:05")}}</span>
        {% endif %}
    </div>
    <div>
        {%- archiveDetail articleContent with name="Content" %}
        {{articleContent|safe}}
    </div>
</article>

或者,在文章列表中显示每篇文章的发布日期:

<div>
{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <li>
        <a href="{{item.Link}}">
            <h5>{{item.Title}}</h5>
            <div>{{item.Description}}</div>
            <div>
                <span>发布于:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
                <span>阅读量:{{item.Views}}</span>
            </div>
        </a>
    </li>
    {% empty %}
    <li>
        当前没有任何内容
    </li>
    {% endfor %}
{% endarchiveList %}
</div>

通过灵活运用stampToDate标签和Go语言特有的时间格式化规则,您可以轻松地将网站中的时间戳转化为用户友好的日期时间显示,让您的内容更加生动和实用。

其他时间相关功能

除了stampToDate标签,安企CMS还提供了now标签,如果您需要在页面上显示当前服务器时间,可以直接使用它,其格式化规则与stampToDate相同: {% now "2006年01月02日 15:04:05" %}

常见问题 (FAQ)

1. 为什么安企CMS的时间格式化字符串看起来这么奇怪(例如2006-01-02)? 这是因为安企CMS基于Go语言开发,而Go语言在时间格式化时采用了一个固定的参考日期和时间作为模板。这个参考时间就是2006年01月02日15点04分05秒 -0700 MST。您只需要记住这个“模板”,然后将您想要显示的部分替换成参考时间中的对应数字或字母即可。例如,2006代表年份,01代表月份,02代表日期。这种方式虽然初看起来有些不同寻常,但一旦理解了其原理,会发现它非常灵活和精确。

2. 我想显示“今天”、“昨天”或“几分钟前”这种相对时间,stampToDate能实现吗? stampToDate标签主要用于将时间戳格式化为绝对的日期时间字符串(例如“2023年10月27日 14:30”)。它本身不具备计算相对时间的功能。如果您需要显示“N分钟前”、“M小时前”这种相对时间,可能需要结合自定义的Go语言函数或前端JavaScript逻辑来实现。目前安企CMS模板标签主要侧重于绝对时间显示,未来版本可能会考虑加入更丰富的相对时间显示功能。

3. 我的文章发布时间设置了定时发布,但前台没有显示,是什么原因? 在安企CMS后台编辑文章时,您可以设置“发布时间”。如果这个时间被设置为未来的某个时刻,那么这篇文章在到达设定时间之前,是不会在前台显示的。这是安企CMS的“时间因子-定时发布功能”,旨在提高运营的灵活性。请检查您设置的发布时间是否已到。一旦时间到达,文章便会自动发布并显示出来。