在网站运营中,我们经常会遇到这样的情况:数据库里存储的时间信息,比如文章的发布时间、商品的创建时间等,往往以一串数字(时间戳)的形式存在。这串数字对机器来说清晰明了,但对我们用户来说,可读性就差远了。想象一下,一篇文章旁边显示的是“1678886400”,而不是“2023年03月15日”,体验上是不是大打折扣?安企CMS深知这一点,并为此提供了一个非常实用的模板标签——stampToDate,帮助我们轻松将这些原始时间戳格式化成美观易读的日期和时间。

为什么我们需要格式化时间戳?

数据库中存储的时间戳通常是一个整数,代表从1970年1月1日00:00:00 UTC(Unix纪元)开始到现在的秒数或毫秒数。这种统一的存储方式便于数据处理和跨时区计算,但在前端页面展示时,直接显示这些数字会让用户感到困惑,影响阅读体验。将它们转换为“2023年03月15日 10:30”或“昨天 14:00”这样的格式,能极大地提升网站的专业性和用户友好度。

认识stampToDate标签及其使用方式

安企CMS的stampToDate标签设计得非常简洁高效,它主要需要两个关键信息来完成时间戳的格式化:

  1. 原始时间戳:这是您从数据库中获取到的那串数字。在安企CMS中,这通常是一个10位的整数,代表秒级时间戳。例如,1609470335
  2. 格式字符串:这是定义您想要日期时间如何显示的“模板”。与其他一些系统可能使用YYYY-MM-DD这样的占位符不同,安企CMS(基于Go语言开发)采用的是Go语言特有的日期时间格式化方式。它以一个固定的参考日期 2006-01-02 15:04:05 作为格式化的“样本”。

请注意,这个参考日期本身并不会被实际输出。您需要将您想要的日期时间组成部分,对照这个参考日期中的具体数字来编写格式字符串。例如:

  • 如果您想显示四位数的年份,就写 2006
  • 如果您想显示两位数的月份,就写 01
  • 如果您想显示两位数的日期,就写 02
  • 如果您想显示24小时制的小时数,就写 15
  • 如果您想显示两位数的分钟数,就写 04
  • 如果您想显示两位数的秒数,就写 05
  • 如果您想显示12小时制的小时数,就写 3,并配合 PMAM

stampToDate标签的基本语法结构是:

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

实际操作与示例

让我们通过几个具体的例子,看看stampToDate标签是如何让时间戳“活”起来的。假设我们有一个文章对象item,其发布时间戳字段是CreatedTime(值为1609470335,即2021年1月1日12:25:35)。

  1. 只显示“年-月-日”:

    如果您希望在文章列表中只显示简洁的日期,例如“2021-01-01”:

    <p>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</p>
    

    输出结果将是:2021-01-01

  2. 显示详细的“年-月-日 时:分:秒”:

    如果需要展示精确到秒的时间信息,可以在格式字符串中加入小时、分钟和秒的参考:

    <p>更新时间:{{ stampToDate(item.UpdatedTime, "2006-01-02 15:04:05") }}</p>
    

    输出结果将是:2021-01-01 12:25:35

  3. 自定义中文或其他分隔符格式:

    stampToDate的强大之处在于其灵活性。您可以自由组合文本和参考日期数字来创建任何您想要的格式:

    <p>文章发布于:{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</p>
    

    输出:2021年01月01日

    <p>日期:{{ stampToDate(item.CreatedTime, "01/02/2006") }}</p>
    

    输出:01/01/2021

    甚至可以利用12小时制和AM/PM标记:

    <p>具体时间:{{ stampToDate(item.CreatedTime, "3:04 PM") }}</p>
    

    输出:12:25 PM (如果时间是下午,则显示PM,上午则显示AM)

  4. 在文章详情页的常见用法:

    在文章详情页,您通常会有一个当前文章对象,例如 archive。您可以这样调用它的时间字段:

    <p>发表于:{{ stampToDate(archive.CreatedTime, "2006年01月02日 15:04") }}</p>
    <p>最后编辑:{{ stampToDate(archive.UpdatedTime, "2006-01-02 星期一") }}</p>
    

    Go语言的格式化规则还支持更多高级用法,例如显示星期几、月份