在运营网站时,文章的发布时间往往是用户关注的重要信息之一。一个清晰、易读的时间格式不仅能提升用户体验,也有助于网站内容的专业度。安企CMS作为一款高效、可定制的内容管理系统,提供了灵活的方式来控制模板中各类信息的显示,包括文章的发布时间。

安企CMS的模板系统采用了类似Django的简洁语法,变量通常通过双花括号{{变量}}来引用,而逻辑控制则使用{% 标签 %}这样的结构。文章的发布时间在系统中通常以时间戳(一个表示时间的数字序列)的形式存储。这意味着我们需要一个方法将这个原始的时间戳转换成我们日常习惯阅读的日期格式,例如“2023年6月1日”。

要实现这一点,安企CMS提供了一个非常实用的内置标签:stampToDate

掌握 stampToDate 标签

stampToDate 标签专门用于将时间戳格式化为可读的日期和时间字符串。它的基本用法非常直观: {{stampToDate(时间戳, "格式")}}

这里的关键在于第二个参数——“格式”。安企CMS的stampToDate标签遵循Go语言的时间格式化规则。与许多系统使用YYYY-MM-DD这样的占位符不同,Go语言的时间格式化是基于一个特定的参考时间点:2006年01月02日 15点04分05秒 -0700 MST。您只需根据这个参考时间,将其中的年、月、日、时、分、秒替换成您想要的显示样式即可。

例如,如果您想显示“2023年6月1日”,那么参考时间中的“2006”对应年份,“01”对应月份,“02”对应日期,您只需要将这些部分替换成中文字符或您希望的顺序。

从何获取文章发布时间?

在安企CMS的模板中,您可以通过以下方式获取文章的原始发布时间(时间戳):

  • 文章详情页: 直接使用 archive.CreatedTime。这里的archive通常是当前文章详情页面的数据对象。
  • 文章列表页:{% for item in archives %}循环中,使用 item.CreatedTime

这两个字段都将返回一个10位的时间戳。

实用格式化示例

现在,我们结合stampToDate标签和Go语言的格式化规则,来实现各种日期显示效果:

  1. 显示为“2023年6月1日”:

    {{stampToDate(archive.CreatedTime, "2006年01月02日")}}
    

    这里,2006代表年份,01代表月份,02代表日期,我们用中文字符“年”、“月”、“日”来连接它们。

  2. 显示为“2023-06-01”:

    {{stampToDate(archive.CreatedTime, "2006-01-02")}}
    
  3. 显示为“2023/06/01 15:30”:

    {{stampToDate(archive.CreatedTime, "2006/01/02 15:04")}}
    

    15代表小时(24小时制),04代表分钟。

  4. 只显示日期“06月01日”:

    {{stampToDate(archive.CreatedTime, "01月02日")}}
    
  5. 显示为“6月1日, 2023” (英文常见格式):

    {{stampToDate(archive.CreatedTime, "Jan _2, 2006")}}
    

    注意:Jan 代表月份的缩写,_2 代表日期(如果是个位数则前面有空格)。

整合到实际模板中

让我们看看这些格式化方法如何在实际的模板代码中应用。

在文章详情页模板 (detail.html) 中:

<article class="article-detail">
    <h1>{{archive.Title}}</h1>
    <div class="article-meta">
        <span>发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日")}}</span>
        <span>浏览量:{{archive.Views}}</span>
        <span>分类:<a href="{{archive.Category.Link}}">{{archive.Category.Title}}</a></span>
    </div>
    <div class="article-content">
        {{archive.Content|safe}}
    </div>
</article>

在文章列表页模板 (list.html) 中:

<ul class="article-list">
    {% archiveList articles with type="page" limit="10" %}
        {% for item in articles %}
        <li>
            <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
            <p class="summary">{{item.Description}}</p>
            <div class="meta">
                <span>发布时间:{{stampToDate(item.CreatedTime, "2006年01月02日")}}</span>
                <span>阅读量:{{item.Views}}</span>
            </div>
        </li>
        {% empty %}
        <li>暂无文章内容。</li>
        {% endfor %}
    {% endarchiveList %}
</ul>
{% pagination pages with show="5" %}
    {# 这里是分页导航的代码 #}
{% endpagination %}

通过stampToDate标签,您可以灵活地控制文章发布时间的显示方式,使其完全符合您网站的设计风格和用户需求。安企CMS的这种设计哲学,让内容呈现变得既强大又易于上手。


常见问题 (FAQ)

1. 为什么安企CMS的时间格式化使用的是2006-01-02 15:04:05这样的字符串,而不是常见的YYYY-MM-DD

这是因为安企CMS是基于Go语言开发的,Go语言的时间格式化采用了一个特殊的参考时间点:Mon Jan 2 15:04:05 MST 2006。您需要将您想要显示的时间元素的参考值(例如,2006表示年份,01表示月份,02表示日期)替换成您希望的格式。例如,要显示“年-月-日”,您就写"2006-01-02"。虽然看起来有点独特,但一旦掌握了这个规律,会发现它非常灵活。

2. 除了文章的发布时间(CreatedTime),其他时间字段也能用stampToDate进行格式化吗?

当然可以。只要是安企CMS模板中获取到的10位时间戳字段,比如文章的更新时间archive.UpdatedTimeitem.UpdatedTime,或者是其他自定义字段中存储的时间戳,都可以通过stampToDate标签以同样的方式进行格式化。您只需要将相应的变量替换掉即可。

3. 我能否在同一篇文章或列表项中显示不同格式的发布时间?

完全可以。stampToDate标签可以多次使用,并且每次都可以指定不同的格式。例如,您可能希望在文章顶部显示一个简洁的日期“2023年6月1日”,而在文章底部显示包含具体时间的“2023-06-01 15:30:00”,只需在模板中分别调用{{stampToDate(archive.CreatedTime, "2006年01月02日")}}和`{{stampToDate(archive.CreatedTime, “