在日常的网站内容运营中,时间信息扮演着至关重要的角色。无论是文章的发布日期、产品的上线时间,还是内容的最新更新,这些时间点都直接影响着用户对信息的感知和信任度。然而,在内容管理系统的模板中,我们常常会遇到以“时间戳”形式存储的日期,这些数字串虽然精确,却并不直观。那么,在AnQiCMS模板中,我们应该如何正确地格式化这些时间戳,以便内容能够以我们期望的方式展示呢?

理解AnQiCMS如何处理时间信息

在AnQiCMS中,内容的创建时间(CreatedTime)和更新时间(UpdatedTime)等通常以标准的Unix时间戳形式存储在数据库中。这些时间戳通常是10位或13位的数字,代表从1970年1月1日0时0分0秒(UTC)至今的秒数或毫秒数。对于网站访问者来说,直接显示1678886400这样的数字显然是毫无意义且不友好的。为了提升用户体验,我们需要将其转化为我们日常习惯阅读的日期和时间格式,例如“2023年3月15日”、“昨天 14:30”等。

AnQiCMS为此提供了一个非常实用的模板标签——stampToDate,它能帮助我们轻松地将原始时间戳转换成各种可读的日期时间格式。

stampToDate标签的核心用法

stampToDate标签的使用方式非常简洁明了,其基本语法是:{{stampToDate(时间戳, "格式")}}

这里需要特别注意的是,AnQiCMS使用的日期格式化字符串是基于Go语言的特殊参考时间——2006-01-02 15:04:05。这意味着,你不能像在其他系统中那样直接使用YYYY-MM-DD这样的占位符,而是要用这个参考时间中对应的数字来代表年、月、日、时、分、秒。

让我们通过一些具体的例子来理解这个格式:

  • 年份(Year): 使用2006来表示四位年份。
  • 月份(Month): 使用01Jan来表示两位月份或月份缩写。
  • 日期(Day): 使用02_2来表示两位日期或单数日期。
  • 小时(Hour): 使用15(24小时制)或03(12小时制)来表示小时。
  • 分钟(Minute): 使用04来表示分钟。
  • 秒钟(Second): 使用05来表示秒钟。

以下是一些常用的格式化示例及其预期输出:

  • 显示完整的年月日
    • {{stampToDate(时间戳, "2006-01-02")}}2023-03-15
    • {{stampToDate(时间戳, "2006年01月02日")}}2023年03月15日
  • 显示带时间的年月日
    • {{stampToDate(时间戳, "2006-01-02 15:04")}}2023-03-15 14:30
    • {{stampToDate(时间戳, "2006/01/02 15:04:05")}}2023/03/15 14:30:00
  • 只显示月份和日期
    • {{stampToDate(时间戳, "01-02")}}03-15
  • 只显示时间
    • {{stampToDate(时间戳, "15:04")}}14:30
    • {{stampToDate(时间戳, "03:04 PM")}}02:30 PM (12小时制带上下午)

掌握了这个Go语言的参考时间格式,你就可以根据自己的需求,灵活组合出各种复杂的日期时间显示效果。

在内容模板中应用

现在我们知道如何使用stampToDate了,接下来就是如何在AnQiCMS的实际内容模板中获取时间戳并进行格式化。

假设我们正在开发一个文章详情页的模板,需要显示文章的发布时间。在AnQiCMS中,文章详情页的上下文通常会有一个archive对象,其中包含了CreatedTime字段。我们就可以这样来格式化它:

<article>
    <h1>{{archive.Title}}</h1>
    <p>发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04")}}</p>
    <div>
        {{archive.Content|safe}}
    </div>
</article>

这里,archive.CreatedTime会传入文章的创建时间戳,"2006年01月02日 15:04"则定义了我们希望它显示为“年-月-日 时:分”的格式。

如果在一个文章列表页中,我们需要遍历多篇文章并显示它们的发布时间,我们可以这样做:

<ul>
{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <li>
        <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
        <p>
            <span>分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
            <span>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
            <span>浏览量:{{item.Views}}</span>
        </p>
        <p>{{item.Description}}</p>
    </li>
    {% empty %}
    <li>目前还没有内容发布。</li>
    {% endfor %}
{% endarchiveList %}
</ul>

在这个例子中,item.CreatedTime是在for循环中获取每篇文章的时间戳,并将其格式化为年-月-日的简洁形式。

一些实用技巧与考量

  • 保持一致性: 在网站的不同页面和不同类型的内容中,尽量保持日期时间格式的一致性,这样可以避免用户产生困惑。
  • 考虑多语言: 如果您的网站支持多语言,您可能需要在不同的语言版本中采用符合当地习惯的日期格式。虽然stampToDate本身不直接提供多语言本地化,但您可以在模板逻辑中结合条件判断或AnQiCMS的多语言支持功能来实现。
  • 未设置时间的处理: 如果某个内容的时间字段可能为空,模板渲染时可能会出现问题。在实际开发中,可以结合if判断来确保只在时间戳存在时才进行格式化和显示。例如:
    
    {% if archive.CreatedTime %}
        <p>发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日")}}</p>
    {% else %}
        <p>发布时间未知</p>
    {% endif %}
    

通过灵活运用stampToDate标签和Go语言的日期格式化规则,您可以在AnQiCMS模板中轻松实现各种日期时间的按需显示,从而为您的网站用户提供更加友好和专业的浏览体验。


常见问题解答(FAQ)

Q1: 为什么AnQiCMS的时间格式化字符串不是常见的Y-m-dyyyy-MM-dd A1: AnQiCMS是基于Go语言开发的,它在日期时间格式化上遵循Go语言的独特规范。Go语言不使用符号占位符,而是使用一个特定的参考日期2006-01-02 15:04:05(也常被称为“Go的时间”或“参考时间”)来定义各种格式。这意味着,您需要在格式字符串中提供您希望输出格式对应的参考时间中的数字或文字。例如,要显示四位年份,就使用参考时间中的年份2006

Q2: 如果我只想显示内容的发布年份,应该怎么做? A2: 如果您只想显示发布年份,可以将stampToDate标签的格式参数设置为`”