在安企CMS中管理网站内容,我们都希望访客能清晰地看到文章的发布或更新时间。一个清晰、美观的时间格式不仅提升了页面的专业度,也优化了用户体验。安企CMS凭借其灵活的模板引擎,让自定义时间戳的显示格式变得非常简单。

接下来,我们将一起探讨如何在AnQiCMS模板中,精准而优雅地呈现文章的发布时间。

理解AnQiCMS模板中的时间数据

在AnQiCMS中,文章的发布时间(CreatedTime)和更新时间(UpdatedTime)通常以时间戳的形式存储在数据库中。时间戳是一串数字,代表了从某个固定时间点(通常是Unix纪元,即1970年1月1日00:00:00 UTC)到文章发布或更新时刻所经过的秒数。虽然这种原始格式对计算机处理非常高效,但对于用户来说却难以理解。

因此,我们的目标就是将这些数字化的时间戳,转换为我们日常熟悉的“年-月-日 时:分:秒”或其他更易读的格式。

核心工具:stampToDate 标签

AnQiCMS的模板引擎提供了一个名为 stampToDate 的内置标签,它正是我们格式化时间戳的秘密武器。这个标签能够接收一个10位的时间戳,并按照我们指定的格式将其转换为可读的日期字符串。

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

这里面有两个关键部分:

  1. 时间戳变量:这通常是 archive.CreatedTimeitem.CreatedTime(在文章列表循环中)。
  2. 格式字符串:这是决定时间显示样式的关键。它遵循Go语言(AnQiCMS的开发语言)特有的一套日期时间格式化规则。

时间格式化的奥秘:Go语言的参考时间

Go语言的日期时间格式化方式有些特殊,它不是使用常见的Y-m-d H:i:sYYYY-MM-DD HH:MM:SS这样的占位符,而是使用一个特定的参考日期和时间来作为模板。这个参考时间就是:2006-01-02 15:04:05

您需要记住,这个参考时间中的每一个数字和符号都代表着你想要在最终输出中看到的对应部分:

  • 2006 代表年份 (完整4位)
  • 01 代表月份 (带前导零,如01)
  • 02 代表日期 (带前导零,如02)
  • 15 代表小时 (24小时制,带前导零,如15)
  • 04 代表分钟 (带前导零,如04)
  • 05 代表秒钟 (带前导零,如05)

如果参考时间中有其他元素,如Mon(星期一)、Jan(一月),它们也同样有其代表的含义。

这意味着,如果您想输出“年-月-日”,您就按照2006-01-02这个模式来写;如果您想输出“月/日/年”,就写成01/02/2006。系统会根据您提供的这个“模板”来解析并格式化您的实际时间戳。

例如:

  • "2006-01-02" 会显示为 2023-10-27
  • "2006年01月02日" 会显示为 2023年10月27日
  • "15:04:05" 会显示为 10:30:00
  • "2006/01/02 15:04" 会显示为 2023/10/27 10:30
  • "Mon, 02 Jan 2006" 会显示为 Fri, 27 Oct 2023

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

了解了 stampToDate 标签和Go语言的格式化规则后,我们就可以在AnQiCMS模板中实际应用了。

在单个文章详情页 (detail.html)

在文章详情页,我们通常通过 archiveDetail 标签来获取文章的详细信息,其中包括 CreatedTime

假设我们希望显示格式为“发布于:2023年10月27日 10:30”。

<article>
    <h1>{% archiveDetail with name="Title" %}</h1>
    <div class="article-meta">
        {# 获取文章发布时间戳 #}
        {% archiveDetail articleCreatedTime with name="CreatedTime" %}
        {# 使用 stampToDate 格式化并显示 #}
        <span>发布于:{{stampToDate(articleCreatedTime, "2006年01月02日 15:04")}}</span>
        {# 您也可以直接在 archive 变量上操作,更加简洁 #}
        {# <span>发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04")}}</span> #}
    </div>
    <div class="article-content">
        {%- archiveDetail articleContent with name="Content" %}
        {{articleContent|safe}}
    </div>
</article>

在文章列表页 (list.htmlindex.html)

在文章列表页,我们通常使用 archiveList 标签循环展示多篇文章。在循环体内,我们可以对每一篇文章的 CreatedTime 进行格式化。

假设我们想在列表中的每篇文章下方显示“2023-10-27”。

”`twig

    {% archiveList archives with type