在网站内容管理中,日期和时间信息的展示无处不在。无论是文章的发布时间、产品的上架日期,还是评论的提交时刻,一个清晰、易读的日期格式对于提升用户体验至关重要。安企CMS(AnQiCMS)深知这一需求,提供了强大的模板标签和过滤器,其中stampToDate过滤器便是将原始Unix时间戳转化为我们熟悉的本地化日期字符串的利器。
本文将深入探讨stampToDate过滤器的用法,帮助您在安企CMS模板中轻松实现各种日期时间格式的自定义显示。
理解安企CMS中的Unix时间戳
在安企CMS中,许多存储在数据库中的日期和时间信息,如文档的创建时间CreatedTime或更新时间UpdatedTime,通常以Unix时间戳的形式存在。Unix时间戳是一个整数,代表从UTC时间1970年1月1日0时0分0秒(又称Unix纪元)起经过的秒数。
直接在模板中显示这样的时间戳,例如1609470335,对普通用户来说是难以理解的。为了提供更好的阅读体验,我们需要将其格式化为“2021年01月01日 12:25”这样的本地化字符串。
核心工具:stampToDate过滤器
安企CMS模板引擎借鉴了Django的语法,并提供了stampToDate这一便捷的过滤器,专门用于将Unix时间戳格式化为可读的日期时间字符串。
基本语法:
{{ stampToDate(时间戳, "格式") }}
其中:
时间戳:通常是您从数据对象(如item.CreatedTime)中获取的10位Unix时间戳。"格式":这是一个字符串,定义了您希望日期时间显示成的具体格式。需要特别注意的是,这个“格式”并非我们常见的Y-m-d H:i:s这类模式,而是采用了Go语言独特的“参考时间”机制。
掌握GoLang时间格式的秘诀
Go语言在定义时间格式时,使用一个固定的参考时间点来表示各时间单位。这个参考时间就是:2006年01月02日 15点04分05秒。
这意味着,当你希望显示年份时,就使用2006;希望显示月份时,就使用01(代表一月);希望显示日期时,就使用02(代表二号),以此类推。以下是常用的对应关系:
2006-> 年 (YYYY)01或1-> 月 (MM/M)02或2-> 日 (DD/D)15或3-> 小时 (24小时制 HH/H) 或 (12小时制 hh/h)04-> 分钟 (MM)05-> 秒 (SS)Mon-> 星期几 (如:Mon, Tue, Wed)Monday-> 完整的星期几 (如:Monday, Tuesday)Jan-> 英文月份缩写 (如:Jan, Feb)January-> 完整的英文月份 (如:January, February)
通过组合这些参考时间元素,您几乎可以定义出任何想要的日期时间格式。
常用格式化示例与应用
假设我们有一个Unix时间戳1672502400,它对应的是2023年01月01日 00:00:00。我们来看看如何用stampToDate过滤器将其格式化成多种常见的本地化字符串。
“YYYY年MM月DD日 HH:MM” (如:2023年01月01日 00:00)
{{ stampToDate(1672502400, "2006年01月02日 15:04") }}输出:
2023年01月01日 00:00“YYYY-MM-DD” (如:2023-01-01)
{{ stampToDate(1672502400, "2006-01-02") }}输出:
2023-01-01“MM/DD HH:MM” (如:01/01 00:00)
{{ stampToDate(1672502400, "01/02 15:04") }}输出:
01/01 00:00“HH:MM:SS” (如:00:00:00)
{{ stampToDate(1672502400, "15:04:05") }}输出:
00:00:00“YYYY/MM/DD 星期几” (如:2023/01/01 星期日)
{{ stampToDate(1672502400, "2006/01/02 星期Monday") }}输出:
2023/01/01 星期Sunday(注意Go语言的Monday对应输出完整的星期几,这里会是Sunday,因为1672502400是周日)
实际应用场景举例
在安企CMS的模板设计中,stampToDate过滤器常用于archiveList(文档列表)、archiveDetail(文档详情)和commentList(评论列表)等标签中。
例如,在一个文档列表中显示每篇文章的发布时间:
{% archiveList archives with type="page" limit="10" %}
{% for item in archives %}
<div class="article-item">
<h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
<p>发布时间:
<time datetime="{{ stampToDate(item.CreatedTime, "2006-01-02T15:04:05") }}">
{{ stampToDate(item.CreatedTime, "2006年01月02日 15:04") }}
</time>
</p>
<p>{{ item.Description }}</p>
</div>
{% empty %}
<p>暂时没有文章。</p>
{% endfor %}
{% endarchiveList %}
在这个例子中,item.CreatedTime获取到的是Unix时间戳,通过stampToDate过滤器,我们将其格式化成了用户友好的“年-月-日 时:分”形式,同时也在<time>标签的datetime属性中输出了机器可读的ISO 8601格式,兼顾了用户体验和SEO。