在安企CMS(AnQiCMS)的模板开发中,我们经常会遇到需要将后台存储的时间戳数据转化为用户界面上清晰可读的日期和时间格式。原始的时间戳,例如 1609470335,对普通用户来说毫无意义。为了提升网站的用户体验,恰当地展示时间信息显得尤为重要。幸运的是,AnQiCMS 提供了一个非常实用的内置过滤器——stampToDate,可以帮助我们轻松实现这一目标。

核心功能:stampToDate 过滤器简介

stampToDate 过滤器是 AnQiCMS 模板引擎中专门用于时间戳格式化的工具。它的主要作用就是将一串数字表示的时间戳,按照你指定的格式,转换成易于理解的日期和时间字符串。无论你是要显示文章发布日期、商品更新时间,还是其他任何基于时间戳的信息,stampToDate 都能提供灵活且强大的支持。

掌握使用方法:轻松格式化时间戳

stampToDate 过滤器的使用方式非常直观,它需要两个关键参数:

  1. 时间戳(Timestamp):这是一个通常为10位的整数,代表从Unix纪元(1970年1月1日00:00:00 UTC)到现在的秒数。在AnQiCMS的模板中,这个时间戳通常来自数据库字段,比如文章对象的 CreatedTimeUpdatedTime

  2. 格式字符串(Format String):这是决定日期和时间显示样式的关键。由于AnQiCMS底层基于Go语言开发,这里的格式字符串遵循Go语言独特的参考时间规则。Go语言的参考时间是:2006-01-02 15:04:05 -0700 MST

    要理解这个格式字符串,你需要将Go的参考时间看作一个“模板”。你想在最终输出中显示什么,就用参考时间中对应部分来表示。例如:

    • 2006 代表年份
    • 01 代表月份
    • 02 代表日期
    • 15 代表小时(24小时制)
    • 04 代表分钟
    • 05 代表秒

    以此类推,如果你想显示“年-月-日”,就可以用"2006-01-02"作为格式字符串。

基本的语法结构是: {{ stampToDate(时间戳变量, "格式字符串") }}

让我们通过一个示例时间戳 1609470335(表示 2021-01-01 00:25:35)来演示:

实用案例:将时间戳转化为多种日期格式

假设我们有一个时间戳变量 publishStamp,其值为 1609470335

  • 仅显示日期(年-月-日): 如果你只需要显示具体的年月日,可以使用"2006-01-02"作为格式字符串。

    <div>发布日期:{{ stampToDate(publishStamp, "2006-01-02") }}</div>
    {# 输出: 发布日期:2021-01-01 #}
    
  • 显示中文日期格式: 如果希望日期以中文形式呈现,只需在格式字符串中加入中文即可。

    <div>发布日期:{{ stampToDate(publishStamp, "2006年01月02日") }}</div>
    {# 输出: 发布日期:2021年01月01日 #}
    
  • 显示完整日期和时间: 要展示到分钟甚至秒,可以将小时、分钟、秒的参考数字加入。

    <div>发布时间:{{ stampToDate(publishStamp, "2006-01-02 15:04:05") }}</div>
    {# 输出: 发布时间:2021-01-01 00:25:35 #}
    
  • 自定义分隔符: 你可以根据自己的需要更改年、月、日之间的分隔符,例如使用斜杠。

    <div>日期:{{ stampToDate(publishStamp, "2006/01/02") }}</div>
    {# 输出: 日期:2021/01/01 #}
    
  • 只显示时间: 如果只想展示时间部分,可以这样组合。

    <div>精确到分钟:{{ stampToDate(publishStamp, "15:04") }}</div>
    {# 输出: 精确到分钟:00:25 #}
    

在AnQiCMS模板中,我们常常从archiveListarchiveDetail标签获取到的文章对象中获取时间戳。例如,一篇文章的创建时间可以通过 item.CreatedTimearchive.CreatedTime 来获取。

{# 在文章列表中,显示每篇文章的创建时间 #}
{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <div>
        <h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
        <p>发布于:{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</p>
    </div>
    {% endfor %}
{% endarchiveList %}

{# 在文章详情页,显示文章的更新时间 #}
{% archiveDetail archive with name="CreatedTime" %}
    <p>最近更新:{{ stampToDate(archive.UpdatedTime, "2006-01-02 15:04") }}</p>
{% endarchiveDetail %}

进阶技巧:时间戳的来源与应用

AnQiCMS 的许多数据模型都包含了时间戳字段,例如:

  • 文档(Archive)CreatedTime(创建时间)、UpdatedTime(更新时间)
  • 分类(Category):通常不直接包含时间戳,但可以获取其下最新文章的时间。
  • 标签(Tag):同样不直接包含时间戳。

当你在使用archiveListarchiveDetail等标签循环或获取内容时,这些时间戳字段会随着数据一同返回。你只需要将它们作为stampToDate的第一个参数即可。

{# 假设在一个循环中 item 代表一个文章对象 #}
<span>{{ stampToDate(item.CreatedTime, "2006/01/02") }}</span>

这种方式确保了无论数据来源于何处,只要是标准的Unix时间戳,stampToDate都能进行统一且精确的格式化处理。

总结

stampToDate过滤器是AnQiCMS模板中处理时间戳的关键工具,它将复杂的数字转化为用户友好的日期时间表达。通过理解Go语言的参考时间模板2006-01-02 15:04:05 -0700 MST,你可以灵活地定制任何所需的日期时间格式。掌握这个过滤器,将显著提升你的网站内容的可读性和专业度。


常见问题 (FAQ)

问:为什么我的时间格式化输出是 0001-01-011970-01-01 答:这通常意味着您提供给stampToDate过滤器的时间戳是一个无效值(例如0、null、空字符串)或未正确获取。在Unix时间戳中,0代表1970年1月1日,而Go语言的time.Time零值是0001年1月1日。请检查您传入的时间戳变量是否为空或是否包含了正确的1