在网站运营中,我们经常需要动态地显示当前年份或时间,例如在网站底部显示最新的版权年份,或者在文章中精确标记页面的生成时间。AnqiCMS 提供了灵活强大的模板功能,让这些操作变得非常简单。接下来,我们将探讨如何在 AnqiCMS 模板中实现这一需求。

动态显示当前年份或时间:使用 now 标签

AnqiCMS 提供了一个非常便捷的内置标签 now,用于在模板渲染时,动态获取并显示当前的日期或时间。这个标签的关键在于其时间格式化字符串,它遵循 Go 语言独特的日期时间格式表示方法,而不是我们常用于 PHP 或 JavaScript 中的 Y-m-d H:i:s 这类格式。

在 Go 语言中,格式化字符串实际上是一个具体的参考时间:2006年01月02日 15时04分05秒。您需要将您想要显示的时间元素的“布局”与这个参考时间的对应部分进行匹配。

以下是一些常用的 now 标签示例及其输出:

  • 仅显示当前年份: 如果您想在网站页脚显示版权年份,可以直接使用:

    © {% now "2006" %} 版权所有。
    

    这会在页面上显示为:© 2023 版权所有。(假设当前年份是 2023)

  • 显示完整日期: 如果需要在页面上展示当前的完整日期,例如 年-月-日 格式:

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

    页面显示可能为:今天是:2023-10-26

  • 显示完整日期和时间: 如果需要包含精确到秒的时间:

    页面加载于:{% now "2006-01-02 15:04:05" %}
    

    页面显示可能为:页面加载于:2023-10-26 10:30:45

  • 自定义格式显示: 您可以根据需要自由组合,例如显示“年/月/日 星期几 小时:分钟”:

    更新时间:{% now "2006/01/02 Mon 15:04" %}
    

    页面显示可能为:更新时间:2023/10/26 Thu 10:30

此外,now 标签还有一个可选参数 fake,用于在开发和调试时强制显示一个固定的参考时间,方便样式调试或数据展示,例如:

测试时间:{% now "2006-01-02 15:04:05" fake %}

这会显示 Go 语言的参考时间本身,而不是当前系统时间。

格式化已有的时间戳:使用 stampToDate 函数

除了显示当前时间,我们常常还需要显示文章发布时间、更新时间等信息。这些时间通常以时间戳(Unix timestamp)的形式存储在数据库中。AnqiCMS 提供了 stampToDate 函数来帮助我们将这些时间戳格式化为可读的日期或时间。

这个函数接受两个参数:一个 10 位的时间戳(例如从 archive.CreatedTimeitem.UpdatedTime 获取),以及一个与 now 标签相同的 Go 语言格式化字符串。

以下是一些 stampToDate 函数的常用示例:

  • 格式化文章创建日期: 在文章详情页或列表页中,您可以这样显示文章的发布日期:

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

    页面显示可能为:发布于:2023年09月15日

  • 格式化文章更新日期和时间: 如果需要展示精确的更新时间:

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

    页面显示可能为:最后更新:2023-10-25 18:00

  • 仅显示时间: 您可以仅提取时间部分进行显示:

    具体时间:{{ stampToDate(archive.CreatedTime, "15:04") }}
    

    页面显示可能为:具体时间:10:30

archive.CreatedTimeitem.UpdatedTime 是 AnqiCMS 模板中常见的变量,它们分别代表当前文档(或列表中的某个条目)的创建时间和更新时间的时间戳。

实际应用场景

  • 网站页脚版权信息: 最常见的用途之一,确保版权年份自动更新:

    <footer>
        <p>&copy; {% now "2006" %} All Rights Reserved. {{ system.SiteName }}</p>
    </footer>
    
  • 文章发布/更新元信息: 在文章标题下方或侧边栏显示关键时间信息:

    <div class="article-meta">
        <span>发布日期:{{ stampToDate(archive.CreatedTime, "2006年01月02日") }}</span>
        <span>更新日期:{{ stampToDate(archive.UpdatedTime, "2006-01-02 15:04") }}</span>
    </div>
    
  • 动态页面提示: 例如在某个列表页或工具页显示数据更新的实时性:

    <p>数据最后更新于:{% now "2006-01-02 15:04" %}</p>
    

通过 now 标签和 stampToDate 函数,AnqiCMS 模板在处理日期和时间显示方面提供了强大的灵活性,无论是获取当前时间还是格式化已有的时间戳,都能够轻松应对,让您的网站内容保持时效性和专业性。

常见问题 (FAQ)

1. 为什么 AnqiCMS 模板中的日期格式化字符串是 2006-01-02 15:04:05 这种形式,而不是常见的 YYYY-MM-DD

这是因为 AnqiCMS 的模板引擎基于 Go 语言,而 Go 语言的日期时间格式化功能使用一个固定的参考时间 2006-01-02 15:04:05.999999999 -0700 MST(即 2006 年 1 月 2 日 下午 3 点 4 分 5 秒)来定义布局。您需要将您想要显示的日期时间元素(如年、月、日、时、分、秒)与这个参考时间中的对应数字进行匹配,而不是像其他语言那样使用占位符。例如,要显示年份,您就写 2006,而不是 YYYY

2. 我可以直接在 {{ ... }} 中使用 {% now "2006" %} 这样的语法吗?

不可以。在 AnqiCMS 模板中,{{ ... }} 用于输出变量的值,而 {% ... %} 用于执行控制逻辑或调用标签。now 是一个标签,所以必须使用 {% now ... %} 的语法来调用。如果您想将 now 标签的结果赋值给一个变量再输出,可以使用 {% set current_year = now "2006" %} 然后在 {{ current_year }} 中输出,但直接使用 {% now "2006" %} 通常更简洁。

3. 除了显示年份和完整的日期时间,我还能如何显示当前月份、星期几或其他特定时间元素?

您只需参照 Go 语言的格式化布局,找到对应的时间元素并将其放入您的格式化字符串中。例如: