- 修改/设置时间戳:指在发布或编辑文章时,如何设置或修改文章的发布时间。
- 调用时间戳:指在前台模板文件中,如何调用并显示文章的时间信息,并将其格式化为你想要的样式。
我会分两部分详细说明,并提供代码示例。

第一部分:如何修改文章的时间戳
在织梦中,文章的发布时间存储在数据库的 dede_archives 表的 senddate 字段中,修改时间戳,本质上就是修改这个字段的值。
后台手动修改(最简单)
- 登录织梦后台。
- 进入「内容管理」 -> 「普通文档管理」。
- 找到你想要修改的文章,点击标题进入编辑页面。
- 在编辑页面,找到右上角的「文档发布时间」选项。
- 点击旁边的日历图标,选择你想要的新日期和时间。
- 点击「保持」或「更新」按钮即可。
这种方法适合少量文章的修改。
使用SQL命令批量修改(适合大量修改)
如果你需要将很多文章的时间修改为某个特定时间(统一改为发布当天),或者进行批量调整,直接操作数据库最高效。
操作步骤:

- 登录你的网站数据库管理工具(如 phpMyAdmin)。
- 选择你的织梦数据库(通常是
dedecms或你自定义的名称)。 - 点击「SQL」选项卡,执行SQL语句。
常用SQL示例:
示例1:将所有文章的发布时间修改为当前时间
UPDATE dede_archives SET senddate = UNIX_TIMESTAMP(NOW());
NOW()获取当前系统时间。UNIX_TIMESTAMP()将时间戳转换为Unix时间戳格式,这是senddate字段存储的格式。
示例2:将所有文章的发布时间修改为2025年1月1日 12:00:00
UPDATE dede_archives SET senddate = UNIX_TIMESTAMP('2025-01-01 12:00:00');
示例3:将某个栏目ID为5的所有文章,发布时间修改为文章的更新时间(pubdate)

UPDATE dede_archives SET senddate = pubdate WHERE typeid = 5;
typeid = 5是条件,你可以修改成你自己的栏目ID。
⚠️ 重要提醒:
- 备份数据库! 在执行任何批量更新操作前,务必备份数据库,以防误操作导致数据丢失。
dede_archives是默认的表前缀,如果你的织梦安装时修改了表前缀(mycms_),请将SQL语句中的dede_archives替换为你的实际表前缀。
第二部分:如何在模板中调用和格式化时间戳
织梦提供了强大的标签来调用文章信息,时间戳的调用和格式化主要通过 arclist、arclist、field 等标签实现。
基本调用标签
织梦在循环文章时,会生成一个对象,我们可以通过 field 标签来获取它的属性。
-
获取Unix时间戳:
{field.senddate}这会输出一串数字,
1678886400。 -
获取格式化后的日期(常用): 织梦内置了
MyDate函数来格式化时间戳。{MyDate('m-d', field.senddate)}这会输出
03-15这样的格式。
MyDate 函数详解
MyDate 函数是格式化时间的关键,它的语法是 {MyDate('格式', 时间戳)}。
-
第一个参数:格式化字符串
Y:四位数的年份,2025y:两位数的年份,23m:两位数的月份,03d:两位数的日期,15H:24小时制的小时,14h:12小时制的小时,02i:分钟,05s:秒,09- 其他字符会原样输出,
年、月、日、 等。
-
第二个参数:时间戳 通常是
field.senddate(发布时间)或field.pubdate(更新时间)。
实际应用场景
在首页或列表页(arclist标签)中显示文章发布日期
假设你想要显示 2025-03-15 这样的格式。
{dede:arclist row="10" titlelen="30"}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
- 这里我们使用了
pubdate(更新时间)和function来调用MyDate。@me代表当前字段的值。 - 如果想用发布时间,把
pubdate换成senddate即可。
页(article_article.htm)中显示发布时间
发布时间:{MyDate('Y-m-d H:i:s', field.senddate)}
这会输出 2025-03-15 14:30:00。
显示“X天前”或“刚刚”这样的相对时间
这是一个很常见的需求,可以通过自定义函数来实现。
步骤:
-
打开
/include/extend.func.php文件(如果不存在,请创建一个)。 -
在文件末尾添加以下PHP函数:
/** * 将时间戳转换为多少天前、多少小时前等 * @param int $ptime 时间戳 * @return string */ function timeBefore($ptime) { $etime = time() - $ptime; if ($etime < 1) return '刚刚'; $interval = array( 12 * 30 * 24 * 60 * 60 => '年前', 30 * 24 * 60 * 60 => '个月前', 7 * 24 * 60 * 60 => '周前', 24 * 60 * 60 => '天前', 60 * 60 => '小时前', 60 => '分钟前', ); foreach ($interval as $secs => $unit) { $d = $etime / $secs; if ($d >= 1) { $r = round($d); return $r . $unit; } } } -
在模板中调用这个函数:
{dede:field.senddate function="timeBefore(@me)"/}如果文章是1小时内发布的,就会显示
XX分钟前;如果是3天前发布的,就会显示3天前。
| 需求 | 方法 | 示例代码 |
|---|---|---|
| 修改单个文章时间 | 后台手动编辑 | 内容管理 -> 普通文档管理 -> 编辑文章 -> 修改发布时间 |
| 批量修改文章时间 | 数据库SQL命令 | UPDATE dede_archives SET senddate = UNIX_TIMESTAMP(NOW()); |
| 调用并格式化日期 | 使用 MyDate 函数 |
{MyDate('Y-m-d', field.senddate)} |
| 调用相对时间(如“X天前”) | 自定义函数 | 在 extend.func.php 中添加函数,模板中用 {field.senddate function="timeBefore(@me)"/} 调用 |
希望这份详细的指南能帮助你完全掌握织梦时间戳的修改和调用!
