在安企CMS的网站模板中,展示文章的发布和更新时间是提升用户体验和内容管理效率的关键环节。清晰地呈现这些时间信息,不仅能帮助访问者快速了解内容的时效性,也有助于搜索引擎更好地抓取和索引。AnQiCMS 提供了一个强大且灵活的模板标签,让您能够根据需要,将时间戳格式化为各种易于阅读的日期和时间格式。

核心机制:stampToDate 标签

安企CMS的模板系统内置了一个名为 stampToDate 的格式化时间戳标签,它是处理文章发布和更新时间的核心工具。这个标签的作用是将文章数据中存储的10位Unix时间戳(例如 1609470335)转换成我们日常生活中常见的日期和时间字符串。

stampToDate 标签的使用方式非常直观,它需要两个主要参数:

  1. 时间戳(timestamp):这是您希望格式化的原始时间数据,通常从文章对象中获取,如 archive.CreatedTimeitem.UpdatedTime
  2. 格式字符串(format_string):这是一个定义输出格式的字符串。与许多CMS系统使用 Y-m-d H:i:s 这样的占位符不同,AnQiCMS 遵循 Go 语言的时间格式化规则,它使用一个固定的参考时间 2006-01-02 15:04:05 来作为格式定义的“模板”。您需要将这个参考时间中的年、月、日、时、分、秒等元素替换成您希望的显示样式。

例如,如果您想显示 年-月-日,那么格式字符串就是 "2006-01-02";如果想显示 月/日 时:分,那么格式字符串就是 "01/02 15:04"

获取文章时间戳

在AnQiCMS模板中,文章的发布时间通常通过 CreatedTime 字段获取,而更新时间则通过 UpdatedTime 字段获取。这些字段都以Unix时间戳的形式存储。

当您在文章详情页(例如 detail.html)时,可以直接通过全局的 archive 对象来访问这些时间戳:

  • archive.CreatedTime 用于发布时间
  • archive.UpdatedTime 用于更新时间

如果您在循环输出文章列表(例如 list.html 或首页)时,文章数据通常会被定义为一个循环变量,例如 item。此时,您可以这样访问时间戳:

  • item.CreatedTime
  • item.UpdatedTime

格式化实践示例

下面是一些常见的格式化场景及其对应的模板代码:

1. 仅显示年-月-日

这是最常用的日期显示格式之一,例如 2023-10-26

{# 在文章详情页显示发布日期 #}
<span>发布日期:{{ stampToDate(archive.CreatedTime, "2006-01-02") }}</span>

{# 在文章列表中显示更新日期 #}
{% for item in archives %}
    {# ... 其他文章信息 ... #}
    <span>更新于:{{ stampToDate(item.UpdatedTime, "2006-01-02") }}</span>
{% endfor %}

2. 显示完整的年-月-日 时:分:秒

如果您需要精确到秒的时间信息,例如 2023-10-26 14:35:01

{# 显示发布时间的完整格式 #}
<span>发布时间:{{ stampToDate(archive.CreatedTime, "2006-01-02 15:04:05") }}</span>

3. 显示中文格式的日期

例如 2023年10月26日

{# 显示中文格式的发布日期 #}
<span>发布于:{{ stampToDate(archive.CreatedTime, "2006年01月02日") }}</span>

4. 只显示月和日,或只显示小时和分钟

您可以根据需要提取时间戳中的特定部分。

{# 只显示月日,例如 10-26 #}
<span>{{ stampToDate(archive.CreatedTime, "01-02") }}</span>

{# 只显示时分,例如 14:35 #}
<span>{{ stampToDate(archive.CreatedTime, "15:04") }}</span>

5. 结合其他文本和HTML标签

您可以将格式化后的时间与其他文字、图标或HTML结构结合,以达到更丰富的展示效果。

<p>
    <i class="fa fa-calendar"></i> 发布于 <time datetime="{{ stampToDate(archive.CreatedTime, "2006-01-02T15:04:05Z07:00") }}">
        {{ stampToDate(archive.CreatedTime, "2006年01月02日") }}
    </time>
</p>

在上述示例中,datetime 属性使用了 ISO 8601 格式,这对于搜索引擎和可访问性工具更为友好,而用户看到的是更易读的中文格式。

总结

通过 stampToDate 标签,AnQiCMS 提供了极大的灵活性来控制文章发布和更新时间的显示。理解 Go 语言的参考时间格式化规则是掌握其用法的关键。一旦熟悉,您便能轻松地在模板中呈现各种符合设计和用户需求的日期时间格式,从而优化您的网站内容展示。


常见问题 (FAQ)

1. 为什么我按照 YYYY-MM-DD 的方式设置格式字符串,但显示的结果是 2006-01-02 这通常是因为您误解了 Go 语言的时间格式化规则。在 Go 语言(以及 AnQiCMS 模板)中,格式字符串不是使用 YYYYMM 等占位符,而是使用一个特定的参考日期 2006-01-02 15:04:05。您需要将这个参考时间中的对应部分替换成您想要输出的样式。例如,要显示 年-月-日,您应该使用 "2006-01-02" 作为格式字符串,而不是 YYYY-MM-DD

2. 除了文章的发布和更新时间,我如何在模板中显示当前的日期和时间? 您可以使用 AnQiCMS 提供的 now 标签来获取并显示当前的日期和时间。这个标签同样遵循 Go 语言的格式化规则。例如,要显示当前的年-月-日,可以使用 {% now "2006-01-02" %};要显示当前的完整日期和时间,则使用 {% now "2006-01-02 15:04:05" %}

3. 我能否将日期显示为“今天”、“昨天”或“N天前”这样的相对时间? AnQiCMS 的 stampToDate 标签主要用于将时间戳格式化为固定模式的日期时间字符串,不直接支持“今天”、“昨天”或“N天前”这样的相对时间显示。如果您需要这类动态的相对时间显示,通常需要在前端通过 JavaScript 实现,或者在后端通过更复杂的业务逻辑计算后传递给模板。一个常见的前端解决方案是,先用 stampToDate 输出标准格式的日期(例如ISO格式),然后使用JavaScript库(如Moment.js或date-fns)或自定义脚本在页面加载后将其转换为相对时间。