在安企CMS的模板设计中,灵活地展示日期和时间是内容呈现的关键一环。为了满足这种精细化的需求,安企CMS提供了一系列实用的时间处理工具,其中datetime过滤器便是针对time.Time类型时间值进行格式化显示的重要功能。

理解 time.Time 类型与过滤器基础

在深入了解datetime过滤器之前,我们需要明确一个前提:这两个过滤器专门用于处理Go语言中的time.Time类型数据。安企CMS基于Go语言开发,其内部处理的时间数据通常就是time.Time对象。如果您在模板中遇到的是一个已经为time.Time类型的时间变量,那么datetime过滤器将是您的首选。

这两个过滤器的核心作用,是将一个标准的time.Time对象,按照您指定的格式字符串,转换为易于阅读的文本形式。值得一提的是,time过滤器实际上是date过滤器的一个别名,它们的功能和用法是完全相同的,您可以根据个人喜好选择使用。

掌握Go语言的时间格式化规则

不同于许多编程语言使用诸如Y-m-d H:i:s这样的占位符来定义时间格式,Go语言采用了一种独特的“参考时间”模式。这个参考时间是固定的:“2006年01月02日 15点04分05秒”。您需要将您期望的输出格式,与这个参考时间中的对应元素进行匹配。例如,如果您想显示年份,就写“2006”;想显示月份,就写“01”;想显示小时,就写“15”。

下面是一些常用格式化规则示例:

  • 年份: 2006 (四位数年份), 06 (两位数年份)
  • 月份: 01 (两位数月份), Jan (缩写月份名,如Jan), January (完整月份名)
  • 日期: 02 (两位数日期)
  • 星期: Mon (缩写星期名), Monday (完整星期名)
  • 小时 (24小时制): 15
  • 小时 (12小时制): 03, PM (上午/下午标记)
  • 分钟: 04
  • 秒: 05
  • 毫秒/微秒/纳秒: .000, .000000, .000000000

datetime过滤器的使用方法

无论您选择date还是time,其基本语法模式都是一致的:

{{ 您的时间变量 | date:"您的格式化字符串" }}

或者

{{ 您的时间变量 | time:"您的格式化字符串" }}

假设您有一个模板变量article.PublishDate,它是一个time.Time类型的值,您可以这样来显示它:

仅显示日期(例如:2023-10-27):

{{ article.PublishDate | date:"2006-01-02" }}

仅显示时间(例如:14:35:00):

{{ article.PublishDate | time:"15:04:05" }}

显示完整日期和时间(例如:2023年10月27日 下午02点35分):

{{ article.PublishDate | date:"2006年01月02日 下午03点04分" }}

显示英文日期格式(例如:Oct 27, 2023):

{{ article.PublishDate | date:"Jan 02, 2006" }}

通过灵活组合这些格式化元素,您几乎可以实现任何所需的日期和时间显示样式。

stampToDate标签的区别

在安企CMS中,除了datetime过滤器,您可能还会遇到stampToDate这个标签。理解它们之间的区别至关重要:

  • date / time 过滤器: 专门用于格式化 Go语言的time.Time类型 的变量。
  • stampToDate 标签: 专门用于格式化 10位Unix时间戳 (即自1970年1月1日00:00:00 UTC以来的秒数)。例如,文章的CreatedTimeUpdatedTime字段通常是以Unix时间戳的形式存储的,这时就需要使用stampToDate

例如,在获取文档列表时,文档的创建时间item.CreatedTime是一个Unix时间戳,您会看到如下用法:

<span>{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>

而如果您有一个从其他渠道获取的,并被确保是time.Time类型的变量,如customEvent.EventStartTime,那么就可以使用date过滤器:

<span>活动开始时间:{{ customEvent.EventStartTime | date:"2006年01月02日 15:04" }}</span>

正确区分这两种时间值类型并选择对应的处理方式,可以确保模板的正常运行和预期的时间显示。

总结

datetime过滤器为安企CMS的模板提供了强大而灵活的时间格式化能力。通过理解它们处理time.Time类型数据的前提,并掌握Go语言独特的“参考时间”格式化规则,您可以轻松地将网站上的时间信息以各种用户友好的方式呈现。同时,请注意区分time.Time对象与Unix时间戳,并合理运用stampToDate标签来处理不同类型的时间数据。


常见问题 (FAQ)

Q1: 为什么我的时间值使用了date过滤器后,页面上不显示或者报错? A1: 这很可能是因为您尝试格式化的变量并非Go语言的time.Time类型,而是10位Unix时间戳。date过滤器严格要求输入是`time.