在网站内容运营中,文章的发布时间往往是用户关注的焦点之一,它不仅影响用户阅读的兴趣,也对内容的实效性和权威性有着潜在的影响。然而,数据库中存储的时间信息通常是机器可读的时间戳格式,例如一串数字,这对于普通访问者来说是难以理解的。AnQiCMS 充分考虑到了这一点,提供了灵活的方式让您将这些时间戳转化为清晰易读的日期和时间格式,极大地提升了用户体验。

AnQiCMS在后台管理文章时,无论是您手动发布、定时发布(借助“时间因子-定时发布功能”),还是通过内容采集或导入,文章的创建时间(CreatedTime)和更新时间(UpdatedTime)等信息都会以标准的时间戳形式储存。这些时间戳是自Unix纪元(1970年1月1日00:00:00 UTC)起经过的秒数,虽然精确,但对用户而言并不直观。

核心工具:stampToDate 标签

为了让这些时间戳在前端页面上以我们熟悉的、易于阅读的格式呈现,AnQiCMS 提供了一个非常实用的模板标签:stampToDate。这个标签能够将时间戳转换为自定义的日期和时间字符串。

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

这里的关键在于格式字符串。AnQiCMS模板采用的是Go语言特有的日期时间格式化规则,而不是您可能在其他系统中常见的YYYY-MM-DD这样的符号。Go语言使用一个固定的参考日期和时间作为模板,您需要通过这个参考日期中的各个组成部分来构建您想要的格式。

这个参考日期就是:2006年01月02日15时04分05秒。 您可以使用这个参考日期中的数字来代表您希望输出的日期时间单位:

  • 年份2006
  • 月份01 (代表月份的数字,不足两位补零) 或 Jan (代表月份的英文缩写)
  • 日期02 (代表日期的数字,不足两位补零)
  • 小时15 (24小时制) 或 03 (12小时制)
  • 分钟04 (不足两位补零)
  • 秒数05 (不足两位补零)

您可以将这些参考数字与分隔符(如-/:、)以及中文字符(如)组合起来,以生成各种所需的日期时间格式。

以下是一些常见格式的示例:

格式字符串 示例输出 (以 2023年10月26日14时30分00秒 为例) 含义
"2006-01-02" 2023-10-26 年-月-日
"2006/01/02" 2023/10/26 年/月/日
"2006年01月02日" 2023年10月26日 中文年-月-日
"01-02" 10-26 月-日
"15:04" 14:30 24小时制 时:分
"15:04:05" 14:30:00 24小时制 时:分:秒
"2006-01-02 15:04:05" 2023-10-26 14:30:00 年-月-日 时:分:秒
"Mon Jan 2 15:04:05 MST 2006" Thu Oct 26 14:30:00 CST 2023 Go语言标准格式,包含星期、月份英文缩写和时区

实践案例:在文章模板中应用

在AnQiCMS的文章或产品列表中(通过archiveList标签获取),以及文章详情页(通过archiveDetail标签获取),每篇文章都会有CreatedTime(文章创建/发布时间)和UpdatedTime(文章最后更新时间)这两个字段,它们都是以时间戳形式提供的。

假设您在一个文章列表页循环显示文章,并且您已经将文章数据赋值给了archives变量,那么在循环体item中,您可以这样格式化时间:

{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <article>
        <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
        <p>{{ item.Description }}</p>
        <div class="meta">
            <span>发布于:{{ stampToDate(item.CreatedTime, "2006年01月02日 15:04") }}</span>
            <span>更新于:{{ stampToDate(item.UpdatedTime, "2006-01-02") }}</span>
            <span>阅读量:{{ item.Views }}</span>
        </div>
    </article>
    {% empty %}
    <p>暂时没有文章。</p>
    {% endfor %}
{% endarchiveList %}

在上面的例子中:

  • {{ stampToDate(item.CreatedTime, "2006年01月02日 15:04") }} 会将文章的创建时间格式化为“2023年10月26日 14:30”这样的中文年月日时分格式。
  • {{ stampToDate(item.UpdatedTime, "2006-01-02") }} 会将文章的更新时间格式化为“2023-10-26”这样的标准日期格式。

同样地,在文章详情页,您可以使用archive变量来直接调用当前文章的时间戳字段:

<section>
    <h1>{{ archive.Title }}</h1>
    <div class="article-info">
        <span>发布日期:{{ stampToDate(archive.CreatedTime, "2006-01-02 15:04") }}</span>
        <span>更新日期:{{ stampToDate(archive.UpdatedTime, "2006-01-02 15:04:05") }}</span>
        <span>浏览次数:{{ archive.Views }}</span>
    </div>
    <div class="article-content">
        {{ archive.Content|safe }}
    </div>
</section>

注意事项与小贴士

  1. Go语言格式的独特性:请