这个标签是网站开发中最常用、最核心的标签之一,用于在文章列表页、文章内容页等地方显示文章的发布时间。

核心标签:field:pubdate
这是获取文章发布时间最根本、最常用的标签,它直接从文章的数据表中调用 pubdate 字段(Unix 时间戳格式)。
基础用法
在 DedeCMS 的模板文件(通常是 .htm 文件)中,使用 {dede:field.pubdate /} 来调用当前文章的发布时间。
示例:
发布时间:{dede:field.pubdate /}
默认情况下,这个标签会直接输出一个 Unix 时间戳,1712345678,这显然不是我们想要的,通常会配合格式化函数一起使用。

常用格式化函数(重点)
为了将时间戳显示为人类可读的格式,我们需要使用 DedeCMS 的内置函数 MyDate()。
MyDate() 函数语法
MyDate(格式, 时间戳)
- 格式: 定义你希望显示的时间样式,使用类似 PHP
date()函数的格式化字符。%Y: 四位年份 (e.g., 2025)%m: 两位月份 (e.g., 05)%d: 两位日期 (e.g., 20)%H: 24小时制小时 (e.g., 14)%i: 分钟 (e.g., 30)%s: 秒- 更多格式字符可以参考 PHP 官方文档。
- 时间戳: 通常就是
field:pubdate。
常见的时间格式示例
只显示年月日,如 2025-05-20
{dede:field.pubdate function='MyDate("%Y-%m-%d", @me)'/}
或者使用简写形式(更推荐):

[field:pubdate function='MyDate("%Y-%m-%d", @me)'/]
输出: 2025-05-20
只显示年月日,如 2025年05月20日
[field:pubdate function='MyDate("%Y年%m月%d日", @me)'/]
输出: 2025年05月20日
显示年月日时分,如 2025-05-20 14:30
[field:pubdate function='MyDate("%Y-%m-%d %H:%i", @me)'/]
输出: 2025-05-20 14:30
显示“年-月-日 时:分:秒”,如 2025-05-20 14:30:45
[field:pubdate function='MyDate("%Y-%m-%d %H:%i:%s", @me)'/]
输出: 2025-05-20 14:30:45
在不同场景下的使用
a) 在文章列表页(list_article.htm)
在列表页,你需要在一个循环中调用每篇文章的时间,这个循环由 {dede:list} 标签完成。
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="time">[field:pubdate function='MyDate("%Y-%m-%d", @me)'/]</span>
</li>
{/dede:list}
b) 在文章内容页(article_article.htm)
页,直接调用即可,因为此时上下文就是当前这篇文章。
<div class="article-info">
<span>发布时间:[field:pubdate function='MyDate("%Y-%m-%d %H:%i", @me)'/]</span>
<span>作者:[field:writer/]</span>
<span>来源:[field:source/]</span>
<span>点击:[field:click/]</span>
</div>
c) 在自定义列表循环中(如栏目页、推荐位等)
在 {dede:arclist}、{dede:loop} 等循环标签中,使用方式与列表页完全相同。
{dede:arclist typeid='1' titlelen='30' row='5'}
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p class="post-meta">[field:pubdate function='MyDate("Y-m-d", @me)'/]</p>
{/dede:arclist}
注意: 在 MyDate 函数中,%Y 和 Y 都可以表示四位年份,%m 和 m 都可以表示两位月份,通常在不严格要求补零的情况下,使用 Y-m-d 更简洁。
高级用法:自定义时间格式(如“X天前”)
对于一些动态网站,我们希望显示“刚刚”、“5分钟前”、“3天前”这样的相对时间,而不是固定的日期格式,这需要通过修改 PHP 文件或使用自定义函数来实现。
方法:修改 include/extend.func.php 文件
- 打开文件:用 FTP 或其他工具登录你的网站,找到并打开
/include/extend.func.php文件。 - 添加函数:在文件末尾添加以下 PHP 函数:
/**
* 将时间戳转换为“X天前”或“X小时前”等相对时间格式
* @param int $ptime 时间戳
* @return string
*/
function formatTime($ptime) {
$ptime = strtotime($ptime);
$etime = time() - $ptime;
if ($etime < 1) return '刚刚';
$interval = array (
12 * 30 * 24 * 60 * 60 => '年前 (%s)',
30 * 24 * 60 * 60 => '个月前 (%s)',
7 * 24 * 60 * 60 => '周前 (%s)',
24 * 60 * 60 => '天前 (%s)',
60 * 60 => '小时前 (%s)',
60 => '分钟前 (%s)',
1 => '秒前 (%s)'
);
foreach ($interval as $secs => $format) {
$key = (int)($etime / $secs);
if ($key >= 1) {
return sprintf($format, $key);
}
}
}
- 在模板中调用:
在你的模板文件中,使用
field:pubdate调用这个新函数。
[field:pubdate function='formatTime(@me)'/]
效果:
- 如果文章是 10 分钟前发布的,会显示
10分钟前。 - 如果文章是 3 天前发布的,会显示
3天前。 - 如果文章是 1 年前发布的,会显示
1年前。
总结表格
| 用途 | 标签代码 | 说明 |
|---|---|---|
| 基础调用 | {dede:field.pubdate /} |
输出 Unix 时间戳,基本不用。 |
| 标准日期 | [field:pubdate function='MyDate("%Y-%m-%d", @me)'/] |
最常用,格式如 2025-05-20。 |
| 中文日期 | [field:pubdate function='MyDate("%Y年%m月%d日", @me)'/] |
格式如 2025年05月20日。 |
| 带时间 | [field:pubdate function='MyDate("%Y-%m-%d %H:%i", @me)'/] |
格式如 2025-05-20 14:30。 |
| 相对时间 | [field:pubdate function='formatTime(@me)'/] |
需要先在 extend.func.php 中添加 formatTime 函数,显示如 3天前。 |
希望这份详细的解析能帮助你完全掌握 DedeCMS 的发布时间标签!
