在安企CMS的日常运营中,我们经常需要处理各种数据,其中时间信息无疑是最常见也最重要的一类。无论是文章的发布日期、更新时间,还是用户评论的具体时刻,这些时间数据通常以时间戳的形式存储。然而,原始的时间戳对于普通用户来说并不直观,它们更像一串无意义的数字。这时,将这些时间戳转换为易于理解的日期或时间格式,就显得尤为关键。
安企CMS的模板系统,采用了类似Django模板引擎的语法,为我们提供了强大的灵活性来控制内容的展示。其中,处理时间戳的利器就是内置的stampToDate标签,它能帮助我们轻松地将后台获取的10位时间戳转换为各种可读的日期和时间格式。
理解时间戳与安企CMS中的时间数据
在安企CMS中,你可能会在多个地方遇到时间戳。例如,当你使用archiveDetail标签获取文章详情,或者archiveList标签获取文章列表时,CreatedTime(创建时间)和UpdatedTime(更新时间)字段默认返回的都是10位的时间戳。同样,在commentList标签中获取评论的CreatedTime,或者通过userDetail标签获取用户的LastLogin(最近登录时间)和ExpireTime(VIP过期时间)时,也都会得到时间戳。
这些时间戳通常是自Unix纪元(1970年1月1日00:00:00 UTC)以来经过的秒数。虽然机器读取方便,但对人眼来说,1675910400这样的数字远不如2023年02月09日或今天上午10:30来得直观。
stampToDate标签:时间格式化的魔法
为了将这些时间戳转化为我们熟悉的格式,安企CMS提供了{{stampToDate(时间戳, "格式")}}这样的用法。这里的关键在于第二个参数——“格式”字符串。安企CMS(基于Go语言开发)的时间格式化遵循Go语言自身的独特规则,它不是我们常见的Y-m-d H:i:s,而是使用2006-01-02 15:04:05这个固定的参考时间来定义格式。
这看起来有些奇特,但一旦掌握了其中的规律,就会发现它非常直观:
- 2006 代表年份(YYYY)
- 01 代表月份(MM)
- 02 代表日期(DD)
- 15 代表24小时制的小时(HH)
- 04 代表分钟(MM)
- 05 代表秒(SS)
- Mon 代表星期几的简写(如Mon、Tue)
- Monday 代表星期几的全称
- Jan 代表月份的简写(如Jan、Feb)
- January 代表月份的全称
- MST 或 -0700 代表时区信息
您只需要将您希望显示的日期时间格式,替换掉2006-01-02 15:04:05中对应位置的数字或字母即可。
例如,如果您想将时间戳格式化为“2023年02月09日”:
{{stampToDate(时间戳, "2006年01月02日")}}
如果需要显示为“2023/02/09 10:30”:
{{stampToDate(时间戳, "2006/01/02 15:04")}}
或者更详细的“2023-02-09 星期四 10:30:00”:
{{stampToDate(时间戳, "2006-01-02 星期一 15:04:05")}}
请记住,格式字符串中的每个数字和字母都有其特定的含义,必须严格按照2006-01-02 15:04:05这个“魔法数字”来构造。
在模板中实际应用
现在,让我们看看如何在实际的安企CMS模板中应用stampToDate标签。
假设你正在制作一个文章列表页面,希望显示每篇文章的发布日期:
{% archiveList archives with type="page" limit="10" %}
{% for item in archives %}
<article>
<h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
<p>
发布于:<span>{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</span>
阅读量:<span>{{ item.Views }}</span>
</p>
<p>{{ item.Description|truncatechars:100 }}</p>
</article>
{% endfor %}
{% endarchiveList %}
在这个例子中,item.CreatedTime会输出原始的时间戳,而stampToDate(item.CreatedTime, "2006年01月02日")则将其转换成如“2023年02月09日”这样友好的格式。
再比如,在文章详情页,你可能需要显示更精确的发布和更新时间:
<article>
<h1>{{ archive.Title }}</h1>
<div class="meta-info">
<span>发布时间:{{ stampToDate(archive.CreatedTime, "2006-01-02 15:04:05") }}</span>
{% if archive.CreatedTime != archive.UpdatedTime %}
<span>最后更新:{{ stampToDate(archive.UpdatedTime, "2006年01月02日 星期一 15点04分") }}</span>
{% endif %}
<span>浏览量:{{ archive.Views }}</span>
</div>
<div class="content">
{{ archive.Content|safe }}
</div>
</article>
这里,我们不仅格式化了发布时间,还通过判断CreatedTime和UpdatedTime是否不同来决定是否显示更新时间,并将其格式化为包含星期信息的中文样式。
格式化时间戳的小贴士
- 保持统一性: 整个网站的时间显示格式最好保持一致,以提供良好的用户体验。
- 考虑目标受众: 根据您网站的主要用户群体,选择最适合他们的日期和时间格式。例如,面向国际用户的网站可能需要更标准的
YYYY-MM-DD格式,而中文用户则更习惯YYYY年MM月DD日。 - 测试是关键: 在不同浏览器和设备上测试您的时间显示,确保它们在任何情况下都能正确显示。
- 查阅Go语言官方文档: 如果您需要更复杂或不常见的格式,可以查阅Go语言官方的
time包文档,了解所有支持的格式化字符串,以定制出最符合您需求的显示方式。
掌握了stampToDate标签和Go语言的时间格式化规则,您就能轻松地将安企CMS中的时间戳数据,转化为用户喜爱、易于阅读的日期与时间,从而大大提升网站内容的专业性和用户友好度。
常见问题 (FAQ)
Q1: 我使用了{{stampToDate(item.CreatedTime, "YYYY-MM-DD")}},为什么显示结果是错的?
A1: 这是因为安企CMS的时间格式化遵循Go语言的规则,它不使用YYYY-MM-DD这种常见的格式,而是使用2006-01-02作为参考。您应该将格式字符串修改为"2006-01-02"才能正确显示年-月-日。请务必参照2006-01-02 15:04:05这个固定值来构造您的格式字符串。
Q2: 除了文章的创建/更新时间,还有哪些地方需要使用stampToDate来格式化时间戳?
A2: 您在评论列表(commentList标签的CreatedTime)、用户详情(userDetail标签的LastLogin、ExpireTime)等场景中获取到的时间数据,同样也是时间戳格式。在这些地方,都可以使用stampToDate标签进行格式化,以提供更友好的显示。
Q3: 如果我只想显示当前年份,模板代码应该怎么写?
A3: 安企CMS提供了一个{% now "2006" %}标签可以直接获取当前年份。如果您想格式化一个已有的时间戳只显示年份,可以使用{{stampToDate(时间戳, "2006")}}。例如,{{stampToDate(item.CreatedTime, "2006")}}会显示文章的发布年份。