网站内容更新频繁,每一篇文章、产品或评论都有其创建和更新的时间点。然而,这些时间通常以一串数字——也就是我们常说的时间戳——的形式存储在后台。直接显示这些时间戳对访问者来说并不友好,我们需要将它们转化为一目了然的日期和时间格式。
在 AnQiCMS 中,将这些时间戳格式化为我们习惯的日期和时间格式,其实非常简单直观。系统内置了一个功能强大的模板标签,可以帮助我们轻松实现这一点。
核心工具:stampToDate 标签
AnQiCMS 提供了一个名为 stampToDate 的模板标签,专门用于将 Unix 时间戳(通常是 10 位或 13 位的整数)转换为可读的日期和时间字符串。这个标签的用法非常灵活,它需要两个关键信息:
- 待格式化的时间戳: 这通常是您从数据库中获取的
CreatedTime或UpdatedTime等字段。 - 格式化字符串: 这是定义您希望日期和时间显示为何种样式的关键。
它的基本语法是这样的:{{stampToDate(时间戳, "格式化字符串")}}
这里需要特别说明一下“格式化字符串”。AnQiCMS 基于 Go 语言开发,因此它遵循 Go 语言独特的时间格式化规则。与许多其他编程语言使用 Y-m-d H:i:s 这样的占位符不同,Go 语言使用一个特定的参考时间来作为模板:2006-01-02 15:04:05。您只需要记住这个参考时间,并根据您想要显示的格式,将参考时间中的对应部分替换成您期望的样式即可。
例如:
- 如果您想显示
2023-10-26,那么格式化字符串就是"2006-01-02"。 - 如果您想显示
2023年10月26日,那么格式化字符串就是"2006年01月02日"。 - 如果您想显示
2023-10-26 14:30:15,那么格式化字符串就是"2006-01-02 15:04:05"。
实际应用场景
这个 stampToDate 标签在 AnQiCMS 的模板中随处可用。无论您是在显示文章列表、文章详情、用户最近登录时间还是评论发布时间,只要遇到时间戳字段,都可以用它来美化显示。
例如,在文章详情页(通常对应 archiveDetail 标签获取的数据)中显示文章的发布时间和更新时间:
<article>
<h1>{{ archive.Title }}</h1>
<p>
<span>发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04")}}</span>
<span>更新于:{{stampToDate(archive.UpdatedTime, "2006-01-02 15:04:05")}}</span>
</p>
<div>
{{ archive.Content|safe }}
</div>
</article>
在文章列表页(使用 archiveList 标签获取的数据)中,为每一篇文章显示其创建日期:
{% archiveList archives with type="page" limit="10" %}
{% for item in archives %}
<li>
<a href="{{item.Link}}">
<h5>{{item.Title}}</h5>
<p>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</p>
</a>
</li>
{% empty %}
<li>暂无文章内容。</li>
{% endfor %}
{% endarchiveList %}
在评论列表中显示评论的发布时间:
{% commentList comments with archiveId=archive.Id type="list" limit="6" %}
{% for item in comments %}
<div>
<span>{{item.UserName}}</span> 于 <span>{{stampToDate(item.CreatedTime, "2006年01月02日 15:04")}}</span> 评论道:
<p>{{item.Content}}</p>
</div>
{% endfor %}
{% endcommentList %}
更灵活的格式定制
Go 语言的参考时间格式非常强大,您可以组合其中的元素,以满足各种复杂的日期时间显示需求:
- 显示星期几: 使用
Mon(星期一的简写) 或Monday(星期一的全称)。- 例如:
"2006年01月02日 Monday"将显示2023年10月26日 Thursday。
- 例如:
- 显示上午/下午: 使用
PM或pm。- 例如:
"15:04 PM"将显示02:30 PM(下午 2:30)。
- 例如:
- 只显示月份和年份:
- 例如:
"2006年01月"将显示2023年10月。
- 例如:
您可以根据需要,自由组合这些参考元素来创建独特的日期时间格式。
其他日期/时间相关标签和过滤器
除了 stampToDate,AnQiCMS 还提供了其他一些与日期时间相关的辅助功能:
- 显示当前系统时间: 如果您需要在页面上显示当前服务器的时间,可以使用
{% now "格式化字符串" %}标签。它同样遵循 Go 语言的格式化规则。<p>当前时间:{% now "2006年01月02日 15:04:05" %}</p> date过滤器: 对于已经是 Go 语言time.Time类型的变量,您也可以使用date过滤器进行格式化。不过请注意,date过滤器仅适用于time.Time类型,直接对整数时间戳使用会导致错误。在 AnQiCMS 的模板中,大部分时间数据都是以时间戳形式提供,因此stampToDate是处理时间戳的首选方法。
总结来说,AnQiCMS 通过直观的 stampToDate 标签和 Go 语言灵活的参考时间格式,让网站内容的时间显示变得既简单又富有表现力。掌握这个小技巧,能让您的网站内容更具可读性和专业度。
常见问题 (FAQ)
1. 为什么 AnQiCMS 格式化日期时要用 “2006-01-02 15:04:05” 这样的数字组合作为格式化字符串?
这是 Go 语言特有的时间格式化方式。与许多编程语言使用符号(如 Y 代表年份,m 代表月份)不同,Go 语言提供了一个特定的参考时间 2006-01-02 15:04:05(也就是 1 月 2 日下午 3 点 4 分 5 秒,2006 年)作为格式化的“模板”。您只需在格式化字符串中,按照这个参考时间中各个数字所代表的意义,编写出您想要的显示格式,系统就会自动将其应用到实际的时间戳上。例如,想要显示完整的年份,就使用 2006。
2. 如果我想显示星期几或者上午/下午,应该怎么设置格式?
要显示星期几,您可以使用参考时间中的 Mon(代表星期一的缩写)或 Monday(代表星期一的全称)。例如,"2006年01月02日 Monday" 会显示 `2023