在文章列表页或内容页调用文章的发布时间
这是最常见的需求,通常用于文章列表、文章详情页显示发布时间。

在列表页 (index.php, list.php, article_list.php 等)
在列表页循环中,每个文章都有一个 pubdate 字段,代表文章发布的时间戳(Unix时间戳),我们可以使用 MyDate() 函数来格式化这个时间戳。
基本语法:
{dede:field name='pubdate' function='MyDate("Y-m-d",@me)'/}
参数解释:
function='MyDate("格式", @me)':这是调用自定义函数的核心。"Y-m-d":这是日期的格式。Y:四位数的年份,2025m:两位数的月份,01到12d:两位数的日期,01到31H:24小时制的小时,00到23i:分钟,00到59s:秒,00到59- 你可以自由组合这些字符,
"Y年m月d日 H:i:s"会显示为2025年10月27日 15:30:00。
@me:这是一个特殊变量,代表当前字段的原始值,在这里就是pubdate的时间戳。
示例:
显示 年-月-日 格式的发布时间:

[field:pubdate function='MyDate("Y-m-d",@me)'/]
显示 年/月/日 格式的发布时间:
[field:pubdate function='MyDate("Y/m/d",@me)'/]
显示 年月日 格式的发布时间:
[field:pubdate function='MyDate("Ymd",@me)'/]
页 (article_article.php)
页,调用方式类似,但标签语法略有不同。
基本语法:

{dede:field.pubdate function='MyDate("Y-m-d",@me)'/}
或者更简洁的写法(如果只是简单格式化):
{dede:field.pubdate function='strftime("%Y-%m-%d",@me)'/}
示例:
显示 年-月-日 格式的发布时间:
{dede:field.pubdate function='MyDate("Y-m-d",@me)'/}
调用当前服务器时间
有时候你可能需要显示的不是文章时间,而是服务器当前的系统时间。
基本语法:
{dede:global name='cfg_phpurl'/}/time.php
工作原理:
DedeCMS 有一个内置的 time.php 文件,它会直接输出当前服务器的时间,这个标签会拼接出这个文件的完整 URL,你可以在模板中直接使用这个 URL,或者通过 JavaScript 等方式来获取和显示时间。
示例: 直接在页面上显示一个链接,点击后查看当前服务器时间:
<a href="{dede:global name='cfg_phpurl'/}/time.php" target="_blank">查看当前服务器时间</a>
如果你想在页面上直接显示时间,可以结合 JavaScript:
<span id="serverTime"></span>
<script type="text/javascript">
// 使用 AJAX 获取 time.php 的内容并显示
fetch("{dede:global name='cfg_phpurl'/}/time.php")
.then(response => response.text())
.then(time => {
document.getElementById("serverTime").innerText = time;
});
</script>
调用指定的时间段(调用2025年的所有文章)
这个需求通常用于制作归档页面或特殊栏目,这需要修改 SQL 查询语句,通常在自定义模型或列表页模板中实现。
方法:修改列表页的 arc.listview.class.php 文件
- 找到文件:打开
/include/arc.listview.class.php文件。 - 修改查询函数:找到
GetSql()函数,修改其中的where条件。
示例:只调用2025年的文章
在 GetSql() 函数中,找到类似 $this->addSql = " And arc.typeid in($typeid) "; 的代码,在其后添加年份判断条件。
// 在 arc.listview.class.php 的 GetSql() 函数中修改 // 原始代码可能类似这样: // $this->addSql .= " And arc.typeid in($typeid) "; // 修改为,增加年份判断: $year_to_query = '2025'; // 你想查询的年份 $this->addSql .= " And arc.typeid in($typeid) And FROM_UNIXTIME(arc.pubdate, '%Y') = '$year_to_query'";
代码解释:
FROM_UNIXTIME(arc.pubdate, '%Y'):这是一个 MySQL 函数,它将 Unix 时间戳 (arc.pubdate) 转换为指定格式的字符串,这里%Y代表四位年份。= '$year_to_query':将转换后的年份与你设定的年份进行比较。
调用月日:
如果你想按月调用,可以修改格式为 %m (月份) 或 %Y-%m (年月)。
// 调用2025年10月的文章 $year_month_to_query = '2025-10'; $this->addSql .= " And arc.typeid in($typeid) And FROM_UNIXTIME(arc.pubdate, '%Y-%m') = '$year_month_to_query'";
注意:直接修改核心文件不是最佳实践,升级时可能会被覆盖,建议通过二次开发或覆盖文件的方式来实现。
在自定义表单或模型中调用时间
如果你在后台创建了自定义模型或表单,并且有日期类型的字段,调用方法也是一样的。
假设你有一个自定义字段 shijian (字段名),类型为日期时间。
在列表页调用:
[field:shijian function='MyDate("Y-m-d",@me)'/]
页调用:**
{dede:field.shijian function='MyDate("Y-m-d",@me)'/}
总结与速查表
| 需求场景 | 调用代码 | 说明 |
|---|---|---|
| 文章列表页 - 年月日 | [field:pubdate function='MyDate("Y-m-d",@me)'/] |
最常用,格式化文章发布时间。 |
| 文章列表页 - 年/月/日 | [field:pubdate function='MyDate("Y/m/d",@me)'/] |
改变分隔符。 |
| 页 - 年月日 | {dede:field.pubdate function='MyDate("Y-m-d",@me)'/} |
内容页的标签语法。 |
| 获取当前服务器时间 | {dede:global name='cfg_phpurl'/}/time.php |
输出一个链接或通过JS获取。 |
| 调用特定年份文章 | 修改 arc.listview.class.php 的SQL查询 |
在 where 条件中加入 FROM_UNIXTIME(pubdate, '%Y') = '2025'。 |
| 调用自定义字段时间 | [field:自定义字段名 function='MyDate("Y-m-d",@me)'/] |
适用于自定义模型中的日期字段。 |
希望这份详细的指南能帮助你解决在 DedeCMS 中调用年月日的问题!
