在网站运营中,我们经常需要在页面上动态地展示当前的年份、日期或时间,比如页脚的版权信息、文章的发布或更新时间等。这些信息如果手动更新,不仅耗时耗力,还容易出错。幸运的是,AnqiCMS 提供了简洁高效的方法,让您在模板中轻松实现这些动态时间信息的获取和显示。

动态获取并显示当前年份或其他时间信息

在 AnqiCMS 模板中,要获取并显示当前年份或任意格式的当前时间,我们可以使用内置的 {% now %} 标签。这个标签非常直接,它会根据您指定的格式,输出服务器当前的日期和时间。

例如,如果您想在网站的页脚显示当前的年份,可以这样使用:

© {% now "2006" %} 您的网站名称。保留所有权利。

这里的 "2006" 并不是随意的一个年份,而是 Golang 语言中定义时间格式的一种特殊参考。如果您希望显示当前完整的日期,例如 2023-10-26,则可以这样写:

今天日期:{% now "2006-01-02" %}

如果需要显示更详细的时间信息,例如 2023-10-26 15:30:00

当前时间:{% now "2006-01-02 15:04:05" %}

{% now %} 标签的灵活性在于它可以根据您提供的 Golang 时间格式字符串,输出任何您想要的当前时间表示形式。

格式化已有的时间戳

除了显示当前时间,更常见的需求是格式化网站内容(如文章、产品)中已存储的时间戳。AnqiCMS 在文档详情、列表等标签中,会提供 CreatedTimeUpdatedTime 这样的时间戳字段。这些字段通常是 10 位的 Unix 时间戳,为了让它们以更易读的格式展示给用户,我们可以使用 {{ stampToDate(时间戳, "格式") }} 这个模板函数。

例如,在一篇博客文章的详情页,您可能想显示其发布日期和时间:

发布于:{{ stampToDate(archive.CreatedTime, "2006年01月02日 15:04") }}

这会把 archive.CreatedTime 这个时间戳转换成 2023年10月26日 15:30 这样的格式。同样地,如果您想展示更新时间:

最后更新:{{ stampToDate(archive.UpdatedTime, "2006-01-02 15:04:05") }}

深入理解Golang时间格式化规则

AnqiCMS 模板中日期和时间的格式化,都遵循 Golang 语言的特定规则。这与我们常用的 YYYY-MM-DD 模式有所不同,初次接触可能会觉得有些特别。

Golang 使用一个固定的参考时间 2006-01-02 15:04:05.999999999 -0700 MST 来定义时间格式。您需要将这个参考时间中的各个部分替换为您希望的格式,而不是使用占位符。

以下是一些常用的参考映射:

  • 年份: 2006 -> YYYY (四位数年份)
  • 月份: 01 -> MM (两位数月份,不足补零) 或 Jan (英文缩写) 或 January (英文全称)
  • 日期: 02 -> DD (两位数日期,不足补零)
  • 小时: 15 -> HH (24小时制) 或 03 (12小时制) 或 3 (无前导零12小时制)
  • 分钟: 04 -> MM (两位数分钟,不足补零)
  • 秒数: 05 -> SS (两位数秒数,不足补零)
  • 星期: Mon (英文缩写) 或 Monday (英文全称)
  • 上午/下午: PM (与 3 小时制结合使用)

掌握了这个映射关系,您就可以非常灵活地组合出各种时间格式。例如:

  • "2006/01/02" -> 2023/10/26
  • "01-02" -> 10-26 (仅显示月日)
  • "15:04" -> 15:30 (仅显示时分)
  • "Monday, Jan 2, 2006" -> Thursday, Oct 26, 2023 (英文星期、月份)

实际应用场景

  • 页脚版权信息:确保每年都能自动更新,无需手动修改模板文件。
    
    <p>&copy; {% now "2006" %} {{ system.SiteName }} 版权所有。</p>
    
  • 文章或产品详情页的时间戳:清晰地展示内容的发布或最近更新日期,提升用户体验和内容时效性。
    
    <p>发布时间:{{ stampToDate(archive.CreatedTime, "2006年01月02日") }}</p>
    {% if archive.UpdatedTime > archive.CreatedTime %}
    <p>最后更新:{{ stampToDate(archive.UpdatedTime, "2006-01-02 15:04") }}</p>
    {% endif %}
    
  • 任何需要动态日期信息的展示:例如,显示活动开始日期、系统运行时间等。

通过 {% now %} 标签和 {{ stampToDate() }} 函数,结合 Golang 灵活的时间格式化规则,AnqiCMS 让动态时间信息的展示变得简单而强大。无论是在网站的每个角落展示版权年份,还是精确到秒的内容发布时间,您都能轻松实现,并确保这些信息始终保持最新和准确。

常见问题 (FAQ)

1. 为什么我使用 {% now "YYYY" %} 无法显示当前年份?

这是因为 AnqiCMS 的时间格式化遵循 Golang 语言的规则,而不是常见的 YYYY-MM-DDYYYY 占位符模式。在 Golang 中,您需要使用一个固定的参考时间 2006-01-02 15:04:05 来定义您的格式。所以,要显示当前年份,应该使用 {% now "2006" %}

2. {{ stampToDate(item.CreatedTime, "...") }} 报错,是什么原因?

通常出现这种错误,可能是 item.CreatedTime 变量本身不是一个有效的时间戳(例如它是空值、字符串类型或其他非数字类型),或者您尝试传入的第一个参数不是一个时间戳。请确保 stampToDate 函数的第一个参数是一个有效的 10 位或 13 位 Unix 时间戳。

3. 我能否显示英文的月份或星期几?

当然可以。Golang 的时间格式化支持多种英文表示。例如,要显示英文的月份缩写,可以使用 Jan;要显示英文的星期几,可以使用 MondayMon。例如:{{ stampToDate(archive.CreatedTime, "Monday, Jan 02, 2006") }} 会显示类似 Thursday, Oct 26, 2023 的格式。