在网站内容管理中,日期和时间的准确展示是提升用户体验、确保信息时效性的关键。AnQiCMS 提供了灵活强大的模板引擎,让您能够轻松地自定义页面上日期时间的显示方式。在众多实用工具中,date 过滤器便是处理日期时间格式化的重要一员。

date 过滤器:格式化日期时间的利器

date 过滤器在 AnQiCMS 模板中用于将 time.Time 类型的日期时间值格式化为我们需要的特定字符串。它的强大之处在于,它遵循 Go 语言独特且高度灵活的日期时间格式化规则。

当您在模板中使用 date 过滤器时,例如 {{ object.timeField|date:"格式字符串" }},您需要提供一个“格式字符串”作为参数。这个格式字符串不是传统的 Y-m-d H:i:s 这样的占位符,而是 Go 语言设计中独具匠心的“参照时间”—— 2006-01-02 15:04:05。这不是一个简单的日期,而是 Go 语言内部用来定义您希望日期如何显示的一个固定模板。您通过这个参照时间来“告诉”系统您想要什么样的输出。

例如,如果您希望显示完整的年份、月份和日期,可以采用 2006-01-02 这样的格式,它会输出类似 2023-10-27 的结果。如果您需要显示更具体的,包含小时和分钟,那么 2006-01-02 15:04 就会输出 2023-10-27 14:35 这样的形式。

灵活多样的日期时间格式化参数

date 过滤器支持的格式化参数非常丰富,因为它的本质就是让您用 2006-01-02 15:04:05 这个参照时间,按照您想要的布局来重新“拼写”。下面是一些常用的格式化参数示例及其对应的输出模式:

  • 只显示日期部分:

    • "2006-01-02":会输出完整的年份、月份和日期,如 2023-10-27
    • "2006/01/02":将分隔符改为斜杠,输出如 2023/10/27
    • "01-02":只显示月份和日期,如 10-27
    • "2006年01月02日":结合中文文本,输出 2023年10月27日
  • 只显示时间部分:

    • "15:04":显示小时和分钟,如 14:35
    • "15:04:05":显示小时、分钟和秒,如 14:35:00
    • "3:04PM":12小时制时间,带上午/下午标识,如 2:35PM
  • 显示日期和时间:

    • "2006-01-02 15:04":常见的日期时间格式,如 2023-10-27 14:35
    • "2006-01-02 15:04:05":包含秒数的完整日期时间,如 2023-10-27 14:35:00
    • "Mon Jan _2 15:04:05 2006":这会输出一个非常详细的格式,包含星期几、月份缩写、日期、时间(含秒)和年份,例如 Fri Oct 27 14:35:00 2023。注意日期前的下划线 _ 是为了单日数字(1-9)前留出空格。
  • 其他更详细的格式:

    • "Monday, 02-Jan-06 15:04:05 MST":会输出类似 Friday, 27-Oct-23 14:35:00 CST 的详细格式。
    • "2006-01-02T15:04:05Z07:00":ISO 8601 格式,常用于数据交换,如 2023-10-27T14:35:00+08:00

关键在于,您只需记住 2006-01-02 15:04:05 这个“魔法数字”,然后根据它来构建您自己的格式字符串。如果您想显示年份,就用 2006 的位置来表示;想显示月份,就用 01 的位置来表示,以此类推。

通常,您在 AnQiCMS 模板中会遇到一些字段本身就是 time.Time 类型,比如文档的 UpdatedTime(更新时间)或分类的 CreatedTime(创建时间)。这时,直接将这些字段通过管道符 | 传递给 date 过滤器,并加上您定义的格式字符串即可。例如:

<p>文章发布于:{{ archive.CreatedTime|date:"2006年01月02日 15:04" }}</p>

此外,AnQiCMS 也提供了 time 过滤器,它的功能与 date 过滤器完全相同,您可以根据个人喜好选择使用其中任意一个。

datestampToDate 的区别

这里有一个非常重要的细节需要注意:date 过滤器专用于处理 time.Time 类型的对象。如果您手头的是一个 10 位或 13 位的 Unix 时间戳(即一串数字,例如 1609470335),则不应直接使用 date 过滤器。这样做会导致系统报错,因为数据类型不匹配。

这时,您应该使用 AnQiCMS 提供的另一个强大标签 —— stampToDate。这个标签专门用来将时间戳转换为可读的日期时间格式,同样使用 Go 语言的参照时间作为格式参数。例如:

{% set publishStamp = 1609470335 %}
<p>时间戳转换:{{ stampToDate(publishStamp, "2006-01-02 15:04:05") }}</p>

理解并正确运用 date 过滤器及其参照时间格式化机制,将使您在 AnQiCMS 中对网站内容的日期时间展示拥有极大的自由度和精细控制,从而更好地满足网站的设计和运营需求。


常见问题 (FAQ)

1. 我想在模板中显示文章的发布时间,但 archive.CreatedTime|date:"..." 不起作用,这是为什么?

这很可能不是 date 过滤器本身的问题,而是您传递给它的 archive.CreatedTime 字段的类型不正确。date 过滤器要求输入必须是 Go 语言的 time.Time 类型。如果 archive.CreatedTime 在 AnQiCMS 后端配置或代码中是以 Unix 时间戳(一串数字)的形式存储的,您就需要改用 stampToDate 标签来格式化它,例如 {{ stampToDate(archive.CreatedTime, "2006-01-02") }}

2. 除了 2006-01-02 15:04:05,我还能在格式字符串中添加自己的文字吗?

当然可以。Go 语言的参照时间格式化机制非常灵活,您可以将固定文本与参照时间元素混合使用。例如,如果您想显示 文章发布于 2023年10月27日 星期五,您可以这样组合格式字符串:"文章发布于 2006年01月02日 Mon",它会根据实际日期输出 `文章发布于 2023年10