在网站内容展示中,我们经常会遇到从数据库获取到的时间数据是一串长长的数字,比如 1678886400。这串数字,也就是我们常说的时间戳,对于计算机来说很方便,但对访问网站的用户而言,却显得冰冷又难以理解。好在,安企CMS为我们提供了一个非常便捷的功能,能够将这些原始的10位时间戳轻松转换为我们习惯阅读的日期和时间格式。

认识 stampToDate 格式化标签

安企CMS的模板引擎(它采用了类似Django模板引擎的语法)内置了一个名为 stampToDate 的标签,专门用于处理时间戳的格式化。它的使用方式非常直观,只需要提供两个参数:需要格式化的 10位时间戳 和你想要的 格式字符串

基本的语法结构是这样的:

{{stampToDate(你的时间戳变量, "格式字符串")}}

这里需要特别注意的,是那个“格式字符串”。它不是我们日常生活中习惯的 YYYY-MM-DD 这种形式,而是采用了一种Go语言特有的“参考时间”格式。别担心,这听起来有点专业,但实际上非常简单:你只需要记住 2006-01-02 15:04:05 这个特定的时间作为标准模板。通过替换这个标准时间中的年月日时分秒,你就可以定义出任何你想要的日期时间显示格式。

例如:

  • 如果你想显示 年-月-日,格式字符串就写 "2006-01-02"
  • 如果你想显示 年/月/日,格式字符串就写 "2006/01/02"
  • 如果你想显示 月-日 时:分,格式字符串就写 "01-02 15:04"
  • 如果你想显示 完整的 年月日时分秒,格式字符串就写 "2006-01-02 15:04:05"

记住,这个“2006-01-02 15:04:05”本身并不代表你会得到这个日期,它只是一个“模板”,系统会根据你提供的实际时间戳和这个模板的对应位置来生成最终的日期时间。

在模板中找到你的时间戳数据

在安企CMS的模板中,许多从数据库中取出的时间字段都默认是以10位时间戳的形式存在的。这些字段通常会带有 Time 后缀,例如:

  • 文章的创建时间: archive.CreatedTime
  • 文章的更新时间: archive.UpdatedTime
  • 评论的创建时间: item.CreatedTime (当你在循环评论列表时)
  • 以及其他类似 CreatedTimeUpdatedTime 的字段。

当你在使用 archiveDetailarchiveListcommentList 等标签获取数据时,这些时间戳字段会被包含在返回的对象中,可以直接通过 . 符号来访问。

将时间戳格式化为可读日期

现在,我们把 stampToDate 标签和实际的时间戳变量结合起来,看看如何在模板中应用:

假设我们正在显示一篇文档的详情页,需要展示其发布时间和更新时间:

<div class="article-meta">
    <p>
        发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日 星期一")}}
    </p>
    <p>
        最近更新:{{stampToDate(archive.UpdatedTime, "2006/01/02 15:04:05")}}
    </p>
    <p>
        简短日期:{{stampToDate(archive.CreatedTime, "01-02")}}
    </p>
</div>

如果我们正在循环一个评论列表,想要显示每条评论的发布时间:

{% for comment in comments %}
    <div class="comment-item">
        <span class="comment-author">{{comment.UserName}}</span>
        <span class="comment-time">于 {{stampToDate(comment.CreatedTime, "2006年01月02日 15:04")}} 评论道:</span>
        <p class="comment-content">{{comment.Content}}</p>
    </div>
{% endfor %}

可以看到,无论是单个数据还是循环中的数据,只要你获取到了那个10位的时间戳变量,就可以灵活地使用 stampToDate 来进行格式化。这让你的网站内容看起来更加专业和用户友好。

通过 stampToDate 这个小巧而强大的标签,我们能轻松地将数据库中冰冷的时间戳转化为用户友好的日期和时间,大大提升网站内容的阅读体验。掌握了这个技巧,您就能让网站的每一个时间信息都变得生动起来。


常见问题 (FAQ)

1. 为什么我的时间戳格式化后显示错误或者空白? 这通常有几个原因:

  • 时间戳数据无效: 检查你传入 stampToDate 的变量是否确实是一个有效的10位时间戳。如果变量为空、0或者其他非数字,可能会导致显示错误。你可以尝试先用 {{你的时间戳变量}} 直接输出,确认它是否是期望的数字。
  • 格式字符串错误: Go语言的日期格式字符串非常严格,必须使用 2006-01-02 15:04:05 作为参考。任何细微的错误(比如年份写成 YYYY)都会导致格式化失败。请仔细对照文档中的参考格式。
  • 时间戳位数不正确: stampToDate 标签预期接收10位(秒级)时间戳。如果是13位(毫秒级)时间戳,你需要先将其除以1000。

2. 我能自定义格式,比如显示星期几或者上午/下午吗? 当然可以。Go语言的日期格式字符串非常强大,支持许多不同的格式化选项,包括星期几、上午/下午等。例如:

  • 显示星期几:"Mon Jan _2 15:04:05 2006" 中的 Mon 对应星期几的简写,Monday 对应星期几的全称。
  • 显示上午/下午:"3:04PM" 中的 PM 即可显示上午/下午。 您可以参考 tag-stampToDate.md 文档中提供的更多示例,尝试组合出你需要的格式。

3. 所有的时间字段都是10位时间戳吗?我怎么知道一个字段是不是时间戳? 在安企CMS中,通常命名带有 Time 后缀的字段(如 CreatedTime, UpdatedTime, LastLogin 等)都是以10位时间戳形式存储的。如果你不确定某个字段的具体数据类型,可以尝试在模板中使用 {{你的字段变量|dump}} 这个过滤器。它会输出该变量的详细类型和值,帮助你确认它是否是时间戳。如果 dump 结果显示为 int64 或类似的整数类型,并且数值看起来像时间戳,那么就可以使用 stampToDate 进行格式化。