作为一位资深的网站运营专家,我深知内容呈现的细节对于用户体验和信息传达至关重要。安企CMS(AnQiCMS)凭借其灵活强大的模板引擎,为我们提供了极大的自由度。今天,我们就来深入探讨一个在内容运营中常见且实用的需求:如何利用stampToDate函数,将文档的UpdatedTime格式化为包含时分秒的完整日期时间。

安企CMS模板中的时间处理艺术

在安企CMS中,文档的创建时间(CreatedTime)和更新时间(UpdatedTime)通常以UNIX时间戳(一个代表自1970年1月1日00:00:00 UTC以来秒数的整数)的形式存储在数据库中。虽然这种格式对于系统内部处理非常高效,但对于终端用户而言,一串冰冷的数字显然不够直观和友好。想象一下,用户看到“最后更新:1678886400”时,他们需要经过心算或工具转换才能理解其含义。这不仅影响了阅读体验,也降低了内容的可读性和专业性。

因此,将这些原始时间戳转换为我们日常习惯的、包含年、月、日、时、分、秒的日期时间格式,是提升网站用户体验、让信息一目了然的关键一步。安企CMS为此提供了一个强大的内置模板函数:stampToDate

核心利器:stampToDate 函数详解

stampToDate是安企CMS模板引擎中专门用于时间戳格式化的函数。它的设计简洁而高效,能够将传入的时间戳按照你指定的格式输出。

它的基本语法是:

{{stampToDate(时间戳, "格式")}}

这里有两个关键参数:

  1. 时间戳(时间戳:这通常是一个代表日期时间的整数值,比如我们文章主题中的UpdatedTime。在模板中,它会是一个变量,如archive.UpdatedTimeitem.UpdatedTime
  2. 格式("格式":这是一个字符串,用于定义你希望时间戳被格式化后的具体显示样式。这一点是stampToDate最独特,也最容易让初学者感到困惑的地方。安企CMS的模板引擎底层基于Go语言,因此它沿用了Go语言独有的日期时间格式化规则。

不同于常见的YYYY-MM-DD%Y-%m-%d等占位符,Go语言的格式化是基于一个固定的参考日期来定义的。这个参考日期是:

2006年01月02日 15时04分05秒 -0700 MST

你需要通过将你希望显示的年、月、日、时、分、秒等信息,替换为这个参考日期中对应的数字来构建你的格式字符串。听起来可能有点抽象,但掌握了其规律后,你会发现它非常灵活。

UpdatedTime:文档更新时间的获取

UpdatedTime字段在安企CMS中用于记录文档的最后一次修改时间。它通常可以在以下两种常见的模板场景中获取:

  • 文档详情页:当你查看某一篇文档的具体内容时,可以通过 archive.UpdatedTime(或你自定义的文档详情变量名,例如articleInfo.UpdatedTime)来获取。
  • 文档列表页:在展示多篇文档的列表中,例如文章列表、产品列表等,通常会在for循环中使用item.UpdatedTime来获取每篇文档的更新时间。

接下来,我们将结合stampToDate函数,在这两种场景下进行实战演练。

实战演练:格式化 UpdatedTime 的具体步骤

场景一:在文档详情页显示完整更新时间

假设你的文档详情模板中,已经通过archiveDetail标签获取了当前文档的信息,并将其赋值给了archiveInfo变量。你希望在页面上显示“最后更新时间:2023-10-27 10:30:45”。

{# 假设通过 archiveDetail 标签已获取文档详情,并赋值给 archiveInfo #}
{% archiveDetail archiveInfo with name="Title" %} {# 只是为了获取 archiveInfo 对象,实际场景可能已在其他地方获取 #}
{% endarchiveDetail %}

<div>
    <h1>{{ archiveInfo.Title }}</h1>
    <p>发布时间:{{ stampToDate(archiveInfo.CreatedTime, "2006-01-02 15:04:05") }}</p>
    <p>最后更新时间:{{ stampToDate(archiveInfo.UpdatedTime, "2006-01-02 15:04:05") }}</p>
    {# 如果只需要显示到分钟,可以这样: #}
    <p>最后更新(精确到分钟):{{ stampToDate(archiveInfo.UpdatedTime, "2006-01-02 15:04") }}</p>
</div>

代码解析:

  • 我们直接将archiveInfo.UpdatedTime作为stampToDate函数的第一个参数传入。
  • 第二个参数"2006-01-02 15:04:05"就是我们用Go语言参考日期构建的格式字符串。2006代表年,01代表月,02代表日,15代表24小时制的小时,04代表分钟,05代表秒。中间的连接符(如-:)和空格都是字面值,会原样输出。

场景二:在文档列表页显示每篇文档的完整更新时间

当你使用archiveList标签循环展示多篇文档时,你需要将stampToDate函数应用到循环中的每个item对象。

{# 假设通过 archiveList 标签获取文章列表 #}
<div class="article-list">
    {% archiveList archives with type="list" limit="5" %}
    {% for item in archives %}
    <div class="article-item">
        <h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
        <p class="article-meta">
            发布时间:<span>{{ stampToDate(item.CreatedTime, "2006-01-02 15:04:05") }}</span>
            更新时间:<span>{{ stampToDate(item.UpdatedTime, "2006-01-02 15:04:05") }}</span>
        </p>
        <p class="article-desc">{{ item.Description }}</p>
        <a href="{{ item.Link }}" class="read-more">阅读详情</a>
    </div>
    {% else %}
    <p>暂无文章</p>
    {% endfor %}
    {% endarchiveList %}
</div>

代码解析:

  • for循环中,我们通过item.UpdatedTime获取当前循环项的更新时间戳。
  • 同样,"2006-01-02 15:04:05"作为格式字符串,确保每篇文章的更新时间都以完整的日期时间格式显示。

掌握 Go 语言日期格式化魔法

理解Go语言的日期格式化是关键。记住,你提供的格式字符串不是一个模式,而是一个范例。你需要提供的是`2006年01月