好的,很高兴为您深入解读 AnQiCMS 的 stampToDate 标签,帮助您轻松驾驭网站上的时间显示。


灵活驾驭时间:利用 AnQiCMS 的 stampToDate 标签定制日期和时间格式

在网站内容管理中,日期和时间的展示方式往往直接影响用户体验和信息传达的清晰度。一个简洁、易读的时间格式能让访客更快地理解内容的时效性。AnQiCMS 作为一个高效的内容管理系统,深知这一点,并为此提供了功能强大且易于使用的 stampToDate 标签,让您能够轻松将数据库中存储的时间戳(Unix Timestamp)格式化为各种自定义的日期和时间格式。

理解时间戳:你的内容时间之源

在 AnQiCMS 内部,很多时间信息,例如文章的发布时间(CreatedTime)、更新时间(UpdatedTime)、评论时间、甚至用户最近登录时间等,都是以时间戳的形式存储的。时间戳通常是一个 10 位的数字,代表从格林威治时间 1970 年 1 月 1 日 00:00:00(UTC)起经过的秒数。例如,1678886400 这样的数字,对于计算机来说很高效,但对于普通访客来说,则难以理解其确切含义。

这就引出了我们对时间格式化的需求,将这些原始数字转换为人们习惯阅读的格式,比如“2023年03月15日 10:00:00”或“3天前”。

stampToDate 标签的核心用法

stampToDate 标签的使用方式非常直观:

{{ stampToDate(时间戳, "格式") }}

这里的关键在于第二个参数——“格式”字符串。与许多其他系统采用 YYYY-MM-DD 这样的占位符不同,AnQiCMS 内部使用的 Go 语言时间格式化标准,有一个固定的“参考时间”。您需要把您期望显示的日期和时间元素替换成这个参考时间对应的部分。这个参考时间就是:

2006-01-02 15:04:05.999999999 -0700 MST (通常简写为 2006-01-02 15:04:05

这就像一个“魔幻数字”,它不是实际的年份,而是 Go 语言用来识别时间元素位置的占位符。您只需要记住,当您想在结果中显示年份,就写 2006;想显示月份,就写 01;想显示日期,就写 02,以此类推。

让我们通过一些常见格式的例子来理解它:

  • 仅显示年份: {{ stampToDate(publishStamp, "2006") }}2023
  • 年-月-日: {{ stampToDate(publishStamp, "2006-01-02") }}2023-03-15
  • 年/月/日: {{ stampToDate(publishStamp, "2006/01/02") }}2023/03/15
  • 月/日/年(常用于国际化): {{ stampToDate(publishStamp, "01/02/2006") }}03/15/2023
  • 时:分:秒(24小时制): {{ stampToDate(publishStamp, "15:04:05") }}10:00:00
  • 年-月-日 时:分: {{ stampToDate(publishStamp, "2006-01-02 15:04") }}2023-03-15 10:00
  • 带中文的完整格式: {{ stampToDate(publishStamp, "2006年01月02日 15时04分05秒") }}2023年03月15日 10时00分00秒
  • 星期几: {{ stampToDate(publishStamp, "Mon") }}Wed (周三)

请注意,格式字符串中的其他字符,如破折号、斜杠、冒号、空格以及中文,都会被原样输出,起到分隔或描述的作用。

stampToDate 应用于你的网站:实际场景举例

stampToDate 标签在 AnQiCMS 的模板开发中无处不在,尤其是在需要展示内容发布或更新时间的场景。

1. 在文档详情页显示发布和更新时间

当您在浏览一篇 AnQiCMS 文章时,通常会看到它的发布日期。假设您在 article/detail.html 模板中,可以使用 archiveDetail 标签获取文档详情,并格式化其中的时间戳。

<article>
    <h1>{% archiveDetail with name="Title" %}</h1>
    <div class="meta-info">
        <span>发布于:{{ stampToDate(archive.CreatedTime, "2006年01月02日 15:04") }}</span>
        <span>更新于:{{ stampToDate(archive.UpdatedTime, "2006-01-02") }}</span>
        <span>浏览量:{% archiveDetail with name="Views" %}</span>
    </div>
    <div class="article-content">
        {% archiveDetail articleContent with name="Content" %}{{ articleContent|safe }}
    </div>
</article>

这段代码将把 archive.CreatedTime 格式化为精确到分钟的中文日期时间,而 archive.UpdatedTime 则只显示到日。

2. 在文档列表页显示文章发布日期

在文章列表页,您可能希望每篇文章旁边都显示其发布日期,以便访客快速了解内容的发布顺序和时效性。

<ul class="article-list">
    {% archiveList archives with type="page" limit="10" %}
        {% for item in archives %}
        <li>
            <a href="{{ item.Link }}">
                <h3>{{ item.Title }}</h3>
                <p>{{ item.Description|truncatechars:100 }}</p>
                <div class="list-meta">
                    <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    <span>分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
                    <span>阅读量:{{ item.Views }}</span>
                </div>
            </a>
        </li>
        {% empty %}
        <li>暂无文章内容。</li>
        {% endfor %}
    {% endarchiveList %}
</ul>

这里,item.CreatedTime 在每次循环中都被格式化为 YYYY-MM-DD 形式。

3. 在评论区显示评论时间

如果您的网站有评论功能,那么每条评论的发布时间也是用户关注的焦点。

”`twig

<h4>用户评论</h4>
{% commentList comments with archiveId=archive.Id type="list" limit="5" %}
    {% for item in comments %}
    <div class="comment-item">
        <strong>{{ item.UserName }}</strong>
        <span class="comment-time">于 {{ stampToDate(item.CreatedTime, "2006-01-02 15:04") }} 评论</span>
        <p>{{ item.Content }}</p>
    </div>
    {% empty %}
    <p>暂无评论。</p>
    {% endfor %}
{%