在网站运营中,我们经常需要在页面上动态地展示当前的年份、日期或时间,比如页脚的版权信息、文章的发布或更新时间等。这些信息如果手动更新,不仅耗时耗力,还容易出错。幸运的是,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 在文档详情、列表等标签中,会提供 CreatedTime 和 UpdatedTime 这样的时间戳字段。这些字段通常是 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>© {% 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-DD 或 YYYY 占位符模式。在 Golang 中,您需要使用一个固定的参考时间 2006-01-02 15:04:05 来定义您的格式。所以,要显示当前年份,应该使用 {% now "2006" %}。
2. {{ stampToDate(item.CreatedTime, "...") }} 报错,是什么原因?
通常出现这种错误,可能是 item.CreatedTime 变量本身不是一个有效的时间戳(例如它是空值、字符串类型或其他非数字类型),或者您尝试传入的第一个参数不是一个时间戳。请确保 stampToDate 函数的第一个参数是一个有效的 10 位或 13 位 Unix 时间戳。
3. 我能否显示英文的月份或星期几?
当然可以。Golang 的时间格式化支持多种英文表示。例如,要显示英文的月份缩写,可以使用 Jan;要显示英文的星期几,可以使用 Monday 或 Mon。例如:{{ stampToDate(archive.CreatedTime, "Monday, Jan 02, 2006") }} 会显示类似 Thursday, Oct 26, 2023 的格式。