在网站运营和内容管理中,我们经常需要处理各种数据,其中日期和时间信息尤为常见。然而,这些数据往往以一串看似无序的数字(即时间戳)形式存储,这对于普通用户而言难以直观理解。AnQiCMS 作为一个高效的企业级内容管理系统,充分考虑了用户的这一需求,提供了简洁而强大的方式,帮助我们将这些时间戳数据转化为一目了然的日期时间格式,并呈现在网站页面上。
AnQiCMS 的模板引擎设计借鉴了 Django 模板和 Blade 模板的语法风格,使得内容开发者可以轻松地通过特定的标签和过滤器,对数据进行处理和展示。要解决时间戳格式化的问题,我们将主要依靠 AnQiCMS 内置的 stampToDate 标签。
理解时间戳:它是什么以及为什么需要格式化?
简单来说,时间戳(Timestamp)是一个数字,它代表了自国际标准时间(UTC)1970年1月1日00:00:00 以来经过的秒数。在 AnQiCMS 中,通常会遇到 10 位的 Unix 时间戳,例如 1609470335。
这样的数字对于计算机来说高效且易于存储和计算,但对于访问网站的用户来说,却是毫无意义的。因此,将这些原始的时间戳数据格式化为“2023年10月27日”、“上午 10:30”或“2023-10-27 10:30:00”等可读的日期时间格式,是提升用户体验的关键一步。
AnQiCMS 中的时间戳数据源
在 AnQiCMS 中,网站内容的许多核心时间信息都以时间戳的形式存在。例如,你在发布一篇文章、更新一个产品、或者用户提交一条评论时,相关的创建时间(CreatedTime)、更新时间(UpdatedTime)等字段,都会以时间戳格式存储。这些字段通常作为内容模型或列表项(item)的属性出现。
例如,在文档详情或文档列表中,你可能会遇到以下表示时间戳的字段:
item.CreatedTime: 内容的创建时间。item.UpdatedTime: 内容的最后更新时间。archive.CreatedTime: 单个文档的创建时间。user.LastLogin: 用户的最后登录时间。
接下来,我们就来看看如何将这些 item.CreatedTime 等时间戳变量,转化为我们熟悉的日期时间格式。
核心功能:stampToDate 标签的使用
AnQiCMS 提供了名为 stampToDate 的内置模板标签,专门用于将时间戳数据格式化为指定的可读日期时间格式。这个标签使用起来非常直观和灵活。
它的基本使用语法是:
{{stampToDate(时间戳变量, "格式字符串")}}
这里的“时间戳变量”就是你希望格式化的那个 10 位时间戳数字,比如 item.CreatedTime。而“格式字符串”则是定义你希望日期时间以何种形式展示的关键。
值得注意的是,AnQiCMS 的模板引擎基于 Go 语言,其日期格式化字符串遵循 Go 语言特有的规则。与我们惯用的 YYYY-MM-DD 或 yyyy-MM-dd 不同,Go 语言使用一个固定的参考日期 2006-01-02 15:04:05(UTC 时间,即 2006 年 1 月 2 日下午 3 点 4 分 5 秒)来作为格式化的模板。你只需要将这个参考日期中的年、月、日、时、分、秒替换为你想要的格式字符,系统就会根据传入的时间戳自动生成对应的日期时间字符串。
下面是一些常见的格式化示例:
仅显示日期(年-月-日) 如果你只需要显示日期,例如“2023-10-27”:
{{stampToDate(item.CreatedTime, "2006-01-02")}}显示完整日期和时间(年-月-日 时:分:秒) 如果你需要显示精确到秒的日期和时间,例如“2023-10-27 10:30:00”:
{{stampToDate(item.CreatedTime, "2006-01-02 15:04:05")}}自定义中文格式 如果你希望以更符合中文习惯的格式显示,例如“2023年10月27日”:
{{stampToDate(item.CreatedTime, "2006年01月02日")}}其他自定义格式 你可以根据需要灵活组合,例如“10/27/2023”或“周五 上午 10:30”:
{{stampToDate(item.CreatedTime, "01/02/2006")}} {# 月/日/年 #} {{stampToDate(item.CreatedTime, "Mon 15:04")}} {# 星期几 时:分 #}
实战演练:在内容列表中应用日期格式
在实际的网站内容展示中,我们通常会在列表页面(如文章列表、产品列表)或详情页面(如文章详情)中使用这个功能。
假设我们有一个文章列表,其中包含了文章的标题和发布时间。以下是一个如何在模板中应用 stampToDate 标签的示例:
”`twig {# 假设