核心函数介绍
MyDate() 函数 - 最常用、最灵活
MyDate() 函数用于格式化输出一个特定的时间戳或当前时间,它的基本语法是:

MyDate('格式', '时间戳');
-
格式: 这是你想要显示的时间样式,使用类似PHPdate()函数的格式字符。%Y: 四位年份 ( 2025)%m: 两位月份 (01-12)%d: 两位日期 (01-31)%H: 24小时制小时 (00-23)%i: 分钟 (00-59)%s: 秒 (00-59)%y: 两位年份 (23)%M: 月份的英文缩写 (Jan, Feb...)%F: 月份的英文全称 (January, February...)%A: 星期几的英文全称 (Sunday, Monday...)%a: 星期几的英文缩写 (Sun, Mon...)- 注意: DedeCMS中推荐使用
%Y,%m等带百分号的格式,而不是Y,m,这样在某些模板引擎下更兼容。
-
时间戳(可选): 你想要格式化的Unix时间戳,如果省略此参数,函数将默认使用当前时间。
GetDateTime() 函数 - 简单直接
GetDateTime() 函数主要用于获取文章的发布时间,它直接返回一个格式化好的字符串。
- 基本语法:
GetDateTime('时间戳') - 返回格式:
Y-m-d H:i:s( 2025-10-27 15:30:00)
这个函数相对简单,主要用于显示文章、栏目等内容的默认发布时间。

常用调用场景与实例
场景1:在文章列表页调用文章发布时间
这是最常见的需求,通常在 article_list.htm 或相关的列表模板中使用。
方法A:使用 MyDate() 函数(推荐,更灵活)
在列表循环中,arc 对象包含了当前文章的所有信息,pubdate 属性就是文章的发布时间戳。
{dede:arclist titlelen='40' row='10'}
<li>
<span>[field:pubdate function="MyDate('%Y-%m-%d', @me)"/]</span>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
代码解析:
[field:pubdate ...]: 获取文章的发布时间戳。function="MyDate('%Y-%m-%d', @me)": 这是一个字段函数。@me: 代表当前字段的值,也就是pubdate的时间戳。MyDate('%Y-%m-%d', @me): 将这个时间戳格式化为年-月-日的形式。
如果你想显示更详细的时间,年-月-日 时:分:
[field:pubdate function="MyDate('%Y-%m-%d %H:%i', @me)"/]
方法B:使用 GetDateTime() 函数
{dede:arclist titlelen='40' row='10'}
<li>
<span>[field:pubdate function="GetDateTime(@me)"/]</span>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
代码解析:
[field:pubdate function="GetDateTime(@me)"/]: 同样是字段函数,调用GetDateTime()将时间戳格式化为Y-m-d H:i:s。
场景2:在文章内容页调用文章发布时间
页模板 article_article.htm 中,可以使用 {dede:field} 标签来调用。
方法A:使用 MyDate() 函数
发布时间:{dede:field.pubdate function='MyDate("%Y-%m-%d %H:%i", @me)'/}
方法B:使用 GetDateTime() 函数
发布时间:{dede:field.pubdate function='GetDateTime(@me)'/}
场景3:调用当前系统时间(非文章时间)
如果你想显示页面被加载时的当前时间,而不是文章的发布时间,可以直接调用 MyDate() 而不传参数。
示例:在页脚显示当前年份
© 2025 - {dede:mydate function='MyDate("%Y")'/} 公司名称. All Rights Reserved.
当页面被访问时,{dede:mydate/} 会自动获取当前服务器时间并格式化为年份。
场景4:调用栏目更新时间
在栏目列表页或内容页,你可能需要显示栏目的最后更新时间,这可以通过 {dede:global} 标签结合SQL查询来实现,或者在列表循环中利用 {dede:arclist} 的 sortup(按更新时间排序)特性来获取。
一个简单的方法是在列表页循环中,获取该栏目下最新一篇文章的时间作为栏目更新时间。
{dede:arclist typeid='栏目ID' row='1' sortup='1'}
本栏目最后更新时间:[field:pubdate function="MyDate('%Y-%m-%d', @me)"/]
{/dede:arclist}
typeid='栏目ID': 指定要查询的栏目。row='1': 只取一篇文章。sortup='1': 按更新时间降序排列,这样取到的就是该栏目最新的一篇文章。
高级技巧:时间格式化中的“、“昨天”
为了让时间显示更人性化,我们可以结合PHP代码和自定义函数来实现“、“昨天”的效果。
步骤1:在 include/extend.func.php 文件中添加自定义函数
打开你的DedeCMS安装目录下的 include/extend.func.php 文件,在文件末尾添加以下代码:
/**
* 将时间戳转换为“、“昨天”或具体日期格式
* @param int $timestamp 时间戳
* @param string $format 具体日期格式 (默认 'Y-m-d H:i')
* @return string
*/
function GetHumanTime($timestamp, $format = 'Y-m-d H:i') {
$today = strtotime(date('Y-m-d', time())); // 今天0点的时间戳
$yesterday = $today - 86400; // 昨天0点的时间戳
if ($timestamp >= $today) {
//
return '' . date('H:i', $timestamp);
} elseif ($timestamp >= $yesterday && $timestamp < $today) {
// 昨天
return '昨天 ' . date('H:i', $timestamp);
} else {
// 更早的时间
return MyDate($format, $timestamp);
}
}
步骤2:在模板中调用这个新函数
现在你可以在任何地方调用这个 GetHumanTime 函数了。
在文章列表页中使用:
{dede:arclist titlelen='40' row='10'}
<li>
<span>[field:pubdate function="GetHumanTime(@me)"/]</span>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
效果:
- 如果文章是今天发布的,会显示
15:30。 - 如果文章是昨天发布的,会显示
昨天 10:15。 - 如果文章是更早发布的,会显示
2025-10-26 09:00(或其他你设定的格式)。
| 函数 | 语法 | 用途 | 灵活性 |
|---|---|---|---|
MyDate() |
MyDate('格式', '时间戳') |
最常用,格式化任意时间戳 | 高,可自定义各种格式 |
GetDateTime() |
GetDateTime('时间戳') |
简单调用文章发布时间 | 低,格式固定为 Y-m-d H:i:s |
| 自定义函数 | 如 GetHumanTime() |
实现特殊需求,如“、“昨天” | 极高,可完全自定义逻辑 |
对于绝大多数情况,直接使用 MyDate() 函数配合字段函数就能满足你的需求,希望这份详细的教程能帮助你更好地在DedeCMS中调用和格式化时间!
