在网站内容管理中,日期和时间的准确展示是提升用户体验、确保信息时效性的关键。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 过滤器完全相同,您可以根据个人喜好选择使用其中任意一个。
date 与 stampToDate 的区别
这里有一个非常重要的细节需要注意: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