在 AnQiCMS 模板中显示日期和时间,并按照特定格式输出,是网站内容运营中常见的需求。无论是展示文章发布时间、活动截止日期,还是在页脚显示当前的年份,准确且美观的时间信息都能提升用户体验。AnQiCMS 提供了简洁高效的模板标签,让您可以轻松实现这些功能。

接下来,我们将详细探讨如何在 AnQiCMS 模板中输出当前的日期和时间,并指定您需要的格式。


一、使用 stampToDate 标签格式化时间戳

在网站内容管理中,文章的创建时间、更新时间等通常是以时间戳的形式存储在数据库中。stampToDate 标签正是为了方便地将这些时间戳转换为可读的日期和时间格式而设计的。

何时使用: 当您需要显示从数据库中获取的、以时间戳形式存在的日期和时间,例如 archive.CreatedTime(文章发布时间)或 archive.UpdatedTime(文章更新时间)时,stampToDate 标签是您的首选。

语法结构:

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

这里的核心是两个参数:

  1. 时间戳: 一个10位的 Unix 时间戳(秒级)。AnQiCMS 内部提供的 CreatedTimeUpdatedTime 等字段默认就是10位时间戳。
  2. 格式: 这是一个字符串,它定义了您希望日期和时间输出的样式。需要特别注意的是,AnQiCMS(基于 Go 语言开发)的格式化规则与 PHP 或 Java 等语言常用的 Y-m-dYYYY-MM-DD 等占位符不同,它采用的是 固定的参考布局时间 来定义格式。这个参考布局是:2006年01月02日 15时04分05秒。您需要将您期望的日期时间格式与这个参考布局进行匹配。

常用格式示例:

  • 显示年份: "2006"
  • 显示月份: "01"
  • 显示日期: "02"
  • 显示小时(24小时制): "15"
  • 显示分钟: "04"
  • 显示秒: "05"
  • 显示年-月-日: "2006-01-02"
  • 显示年/月/日: "2006/01/02"
  • 显示年.月.日: "2006.01.02"
  • 显示中文年-月-日: "2006年01月02日"
  • 显示时:分: "15:04"
  • 显示完整日期时间: "2006-01-02 15:04:05"

代码应用示例:

假设您正在文章详情页(archive 对象可用),需要显示文章的发布时间和更新时间:

<p>
    发布时间:{{stampToDate(archive.CreatedTime, "2006年01月02日 星期一 15:04:05")}}
</p>
<p>
    最近更新:{{stampToDate(archive.UpdatedTime, "2006-01-02 15:04")}}
</p>
<p>
    文章年份:{{stampToDate(archive.CreatedTime, "2006")}}
</p>

这段代码会分别将文章的创建时间格式化为带有星期几的详细时间,更新时间格式化为年-月-日 时:分,以及单独提取发布年份。


二、使用 now 标签获取当前系统时间

除了格式化时间戳,您可能还需要在模板中直接显示页面生成时的当前系统日期和时间。例如,在网站的页脚显示当前的年份,或者在某些特殊页面展示当前时间。now 标签能够满足这种需求。

何时使用: 当您需要显示当前服务器的日期和时间,而不是从数据库中获取的特定内容的时间时,now 标签非常方便。

语法结构:

{% now "格式" %}

这里的“格式”参数与 stampToDate 标签完全相同,同样遵循 Golang 的参考布局时间格式化规则。

代码应用示例:

假设您想在网站页脚显示当前的年份和页面生成时的完整日期时间:

<footer>
    <p>版权所有 &copy; {% now "2006" %} 您的公司名称。保留所有权利。</p>
    <p>页面生成于:{% now "2006-01-02 15:04:05" %}</p>
</footer>

这段代码会在页脚显示当前的年份(例如“2023”)和页面加载时的精确日期和时间。


通过 stampToDatenow 这两个标签,AnQiCMS 为模板中的日期和时间输出提供了强大且灵活的支持。掌握了它们的用法和 Golang 特有的格式化规则,您就能轻松地在网站上展示符合各种需求的日期和时间信息。


常见问题(FAQ)

Q1:stampToDate 中的“格式”参数看起来像一个日期,我可以直接写 YYYY-MM-DD 吗?

A1: 不可以。AnQiCMS 基于 Go 语言开发,其时间格式化机制比较特殊,不是使用 YYYY-MM-DD 这样的占位符。它要求您使用一个固定的参考日期和时间 2006年01月02日 15时04分05秒 来定义您想要的格式。简单来说,如果您想显示“年-月-日”,您需要写成 "2006-01-02";如果想显示“时:分”,就写成 "15:04"。您需要将您期望的输出格式与这个参考时间中的相应部分进行匹配。

Q2:我尝试在模板中使用 {{ item.CreatedTime|date:"2006-01-02" }} 格式化文章创建时间,但页面报错了,这是为什么?

A2: date 过滤器在 AnQiCMS 模板中期望的输入是一个 Go 语言 time.Time 类型的对象。然而,AnQiCMS 模板中的 item.CreatedTime 通常是一个 Unix 时间戳(整数)。因此,直接对时间戳使用 date 过滤器会导致类型不匹配而报错。对于时间戳类型的变量,您应该使用专门的 stampToDate 标签来进行格式化,例如 {{stampToDate(item.CreatedTime, "2006-01-02")}}

Q3:stampToDate 标签中的时间戳是10位还是13位?如果我拿到的是13位时间戳怎么办?

A3: stampToDate 标签主要支持的是 10位 的 Unix 时间戳(表示自1970年1月1日以来的秒数)。AnQiCMS 系统内部的 CreatedTimeUpdatedTime 等字段也默认提供10位时间戳。如果您拿到的是13位的毫秒级时间戳,您需要先将其除以1000转换为秒级(例如在后端控制器中处理),然后才能在 stampToDate 标签中使用。