在安企CMS的模板设计中,灵活地展示日期和时间是内容呈现的关键一环。为了满足这种精细化的需求,安企CMS提供了一系列实用的时间处理工具,其中date和time过滤器便是针对time.Time类型时间值进行格式化显示的重要功能。
理解 time.Time 类型与过滤器基础
在深入了解date和time过滤器之前,我们需要明确一个前提:这两个过滤器专门用于处理Go语言中的time.Time类型数据。安企CMS基于Go语言开发,其内部处理的时间数据通常就是time.Time对象。如果您在模板中遇到的是一个已经为time.Time类型的时间变量,那么date或time过滤器将是您的首选。
这两个过滤器的核心作用,是将一个标准的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
date和time过滤器的使用方法
无论您选择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中,除了date和time过滤器,您可能还会遇到stampToDate这个标签。理解它们之间的区别至关重要:
date/time过滤器: 专门用于格式化 Go语言的time.Time类型 的变量。stampToDate标签: 专门用于格式化 10位Unix时间戳 (即自1970年1月1日00:00:00 UTC以来的秒数)。例如,文章的CreatedTime和UpdatedTime字段通常是以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>
正确区分这两种时间值类型并选择对应的处理方式,可以确保模板的正常运行和预期的时间显示。
总结
date和time过滤器为安企CMS的模板提供了强大而灵活的时间格式化能力。通过理解它们处理time.Time类型数据的前提,并掌握Go语言独特的“参考时间”格式化规则,您可以轻松地将网站上的时间信息以各种用户友好的方式呈现。同时,请注意区分time.Time对象与Unix时间戳,并合理运用stampToDate标签来处理不同类型的时间数据。
常见问题 (FAQ)
Q1: 为什么我的时间值使用了date过滤器后,页面上不显示或者报错?
A1: 这很可能是因为您尝试格式化的变量并非Go语言的time.Time类型,而是10位Unix时间戳。date过滤器严格要求输入是`time.