在安企CMS中管理内容时,我们经常需要以特定的格式展示日期和时间。系统提供了非常方便的模板标签和过滤器来处理这些需求。今天,我们就来聊聊add过滤器如何与stampToDate函数结合,来拼接出格式化后的日期时间字符串,让我们的内容展示更加灵活多样。
认识 stampToDate 函数:格式化时间戳
首先,让我们回顾一下stampToDate函数。这个函数是安企CMS模板中处理时间戳的核心工具。它接收一个Unix时间戳(通常是10位数字)和一个格式字符串,然后按照我们指定的格式输出日期时间。
这里的格式字符串有些特别,它不是我们常见的Y-m-d这类占位符,而是基于一个固定的参考时间:2006-01-02 15:04:05。这意味着你想输出哪一部分,就用这个参考时间中对应的数字来表示。例如:
- 如果你想显示年份(四位数),就用
2006。 - 如果你想显示月份(两位数),就用
01。 - 如果你想显示小时(24小时制),就用
15。
比如说,我们有一篇文章的创建时间戳存储在archive.CreatedTime中,我们想以“年-月-日”的格式显示,可以这样写:
{{ stampToDate(archive.CreatedTime, "2006-01-02") }}
这会输出类似 2023-10-26 的结果。如果想显示具体到秒,可以写成:
{{ stampToDate(archive.CreatedTime, "2006-01-02 15:04:05") }}
输出可能是 2023-10-26 10:30:00。
了解 add 过滤器:拼接你的内容
接下来是add过滤器,它的作用直观而强大。add过滤器可以用来将两个值进行“相加”操作。对于数字,它会进行算术加法;而当我们处理字符串时,它就成了我们拼接文本的利器。
例如,如果你想将两个字符串拼接起来,可以这样做:
{{ "欢迎使用"|add:"安企CMS" }}
这将显示 欢迎使用安企CMS。如果第一个值是字符串,那么后续通过add操作连接的值,即使是数字,也会被自动转换为字符串进行拼接。
结合使用:拼接格式化后的日期时间字符串
现在,让我们把这两个工具结合起来。想象一下,我们希望在页面上显示一篇文章的发布时间,并且前面带上“发布时间:”这样的中文提示。
首先,我们用stampToDate函数将时间戳格式化成我们想要的日期字符串,比如"2006年01月02日"。这个函数的结果就是一个字符串。
然后,我们可以将这个格式化后的日期字符串作为add过滤器的第二个参数,而把“发布时间:”作为第一个参数。
完整的使用方式看起来会像这样:
{{ "发布时间:"|add:stampToDate(archive.CreatedTime, "2006年01月02日") }}
如果archive.CreatedTime对应的时间是2023年10月26日,那么页面的显示结果就会是:发布时间:2023年10月26日。
我们还可以进一步复杂化,比如想要显示“文章发布于:YYYY年MM月DD日,具体时间是:HH时MM分”:
{{ "文章发布于:"
|add:stampToDate(archive.CreatedTime, "2006年01月02日")
|add:",具体时间是:"
|add:stampToDate(archive.CreatedTime, "15时04分") }}
这段代码首先将“文章发布于:”与格式化后的日期字符串拼接,然后将结果与“,具体时间是:”再拼接,最后再与格式化后的时间字符串拼接。这样就能生成一个非常个性化的日期时间显示了。
这种组合的灵活性,在很多场景下都能派上用场。无论是为新闻报道添加精确的发布时间,还是为产品更新注明最后修改日期,通过stampToDate和add过滤器的巧妙结合,你都能轻松实现。
常见问题解答 (FAQ)
1. stampToDate函数中的格式字符串为什么这么奇怪?是固定的2006-01-02 15:04:05吗?
是的,stampToDate函数采用的是Go语言中定义时间格式的独特方式。它不是使用Y-m-d这类占位符,而是将一个固定的参考时间(2006年1月2日 15点04分05秒 -0700 MST)作为模板。你需要显示哪一部分时间信息,就用这个参考时间中对应的数字或字符去替换。例如,要显示年份,就用参考时间中的2006。这提供了非常精细的控制能力,但初次接触时需要一些适应。
2. add过滤器可以拼接多少个字符串?
add过滤器可以链式地进行多次拼接操作。你可以在一个表达式中连续使用多个|add:,就像上面例子中展示的,将多个字符串片段逐个拼接起来,构建出你需要的完整文本。
3. 如果我的时间戳不是10位数字(例如是JavaScript的13位毫秒级时间戳),stampToDate还能用吗?
stampToDate函数通常期望接收一个标准的10位Unix秒级时间戳。如果你的时间戳是13位的毫秒级,你可能需要在传入stampToDate之前,先将其除以1000(例如,使用|divide:1000过滤器,如果AnQiCMS模板引擎支持),将其转换为秒级时间戳。请根据你的实际数据来源和模板引擎支持的过滤器进行调整。