在网站运营中,内容发布时间或更新时间是向用户传递信息的重要组成部分。一个清晰、易读的日期时间格式,不仅能提升用户体验,还能增加内容的专业感和时效性。然而,许多内容管理系统在后台存储时间时,通常采用一串难以直观理解的时间戳。安企CMS(AnQiCMS)也不例外,在使用像prevArchive这样的标签获取文章的CreatedTime或UpdatedTime时,默认返回的也是这种原始的时间戳。
作为一位资深的网站运营专家,我深知将技术信息转化为用户友好的展示是多么重要。今天,我们就来深入探讨,如何在安企CMS中,将这些原始的时间戳数据,格式化成我们更习惯阅读的日期时间格式。
理解原始时间戳与用户需求
首先,我们得明白为什么会出现“一串数字”的情况。安企CMS在数据库中存储CreatedTime和UpdatedTime这类时间字段时,采用的是标准的时间戳格式,也就是自1970年1月1日00:00:00 UTC(Unix纪元)以来所经过的秒数。例如,您可能会在模板中看到类似 1678886400 这样的数字。虽然这对于系统内部处理非常高效和精确,但对于网站访问者而言,这串数字显然没有任何意义,也无法传达文章何时发布或更新的关键信息。
我们的目标,就是将prevArchive、archiveDetail或archiveList等标签获取到的item.CreatedTime或prev.UpdatedTime这样的时间戳,转换成诸如“2023年03月15日 10:30”或“昨天 10:30”这样的易读格式。
安企CMS的秘密武器:stampToDate 标签
安企CMS的模板引擎(基于Go语言的强大特性)为此提供了一个非常便利的内置标签:stampToDate。这个标签专门用于将时间戳格式化为我们需要的日期时间字符串。
它的基本使用方式是:{{stampToDate(时间戳变量, "格式化字符串")}}。
这里的关键在于第二个参数——“格式化字符串”。与许多其他语言不同,Go语言(以及安企CMS的模板引擎)在定义日期时间格式时,并非使用Y-m-d H:i:s这样的占位符,而是使用一个特定的参照时间来作为格式模板。这个参照时间是:2006年01月02日 15时04分05秒。
您没看错,就是这串数字和文字!您想把时间戳格式化成什么样子,就用这个参照时间来“模仿”它。
我们来看几个例子:
- 如果您想显示“年-月-日”,比如
2023-03-15,那么格式化字符串就是"2006-01-02"。 - 如果您想显示“年年年年/月月/日日”,比如
2023/03/15,那么格式化字符串就是"2006/01/02"。 - 如果您想显示“年年年年年年年年时时时时分分”,比如
2023-03-15 10:30,那么格式化字符串就是"2006-01-02 15:04"。 - 如果您想显示“年年年年年年年年时时时时分分秒秒”,比如
2023-03-15 10:30:00,那么格式化字符串就是"2006-01-02 15:04:05"。 - 如果想要中文格式,比如
2023年03月15日,那么格式化字符串就是"2006年01月02日"。
通过这种方式,您几乎可以组合出任何您想要的日期时间显示格式。
实际应用:让时间在模板中“活”起来
现在,我们把这个stampToDate标签应用到具体的场景中。
场景一:在文章详情页格式化单篇文章的时间
假设您正在设计一个文章详情页,需要显示当前文章的发布时间和更新时间。在模板中,当前文章的详情通常通过archive变量直接获取,或者通过archiveDetail标签获取。
如果您想显示发布日期为“年年年年-月月-日日”:
<p>发布时间:{{stampToDate(archive.CreatedTime, "2006-01-02")}}</p>
如果您希望显示更新时间精确到分,并且带有中文描述:
<p>最近更新:{{stampToDate(archive.UpdatedTime, "2006年01月02日 15:04")}}</p>
这种直接使用archive.CreatedTime或archive.UpdatedTime的方式,简洁而高效。
场景二:在文章列表或上一篇/下一篇文章中格式化时间
当您使用archiveList循环遍历文章列表,或者使用prevArchive和nextArchive标签获取上一篇/下一篇文章时,同样可以通过stampToDate标签对时间进行格式化。
例如,在上一篇/下一篇文章的展示中:
{% prevArchive prev %}
{% if prev %}
<p>上一篇:<a href="{{prev.Link}}">{{prev.Title}} ({{stampToDate(prev.CreatedTime, "2006-01-02")}})</a></p>
{% else %}
<p>没有上一篇文章了</p>
{% endif %}
{% endprevArchive %}
{% nextArchive next %}
{% if next %}
<p>下一篇:<a href="{{next.Link}}">{{next.Title}} ({{stampToDate(next.CreatedTime, "2006-01-02")}})</a></p>
{% else %}
<p>没有下一篇文章了</p>
{% endif %}
{% endnextArchive %}
在文章列表的循环中:
{% archiveList archives with type="list" limit="10" %}
{% for item in archives %}
<div>
<h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
<p>发布于:{{stampToDate(item.CreatedTime, "2006年01月02日")}}</p>
<p>{{item.Description}}</p>
</div>
{% endfor %}
{% endarchiveList %}
可以看到,无论是单个文章详情,还是列表中的每个项目,stampToDate标签都能灵活地将时间戳转换为我们想要的易读格式。
优化与**实践
在实际运营中,日期时间格式化不仅仅是技术实现,更关乎用户感知。
- 保持一致性:在整个网站中,发布时间、更新时间的格式应尽量保持一致,避免用户混淆。
- 考虑语境:对于新闻资讯类网站,发布时间可能需要精确到分钟;而对于长篇技术文章,只需显示到日即可。根据内容类型和用户习惯选择合适的格式。
- 利用Go语言的灵活性:Go语言的参照时间格式虽然初看起来有些独特,但它非常灵活。您可以在
tag-stampToDate.md文档中找到更多详细的格式化示例,探索更多可能性。
总结
通过安企CMS提供的stampToDate标签,我们可以轻松地将后台的时间戳数据转化为用户友好、易于理解的日期时间格式。无论您是显示单个文章的发布时间,还是在文章