下面我将从 基础转换、DedeCMS 模板标签、常用场景 和 自定义函数 四个方面,为你详细讲解如何进行时间戳的转化。

基础:PHP 的日期函数
无论在 DedeCMS 的哪里处理时间戳,核心都是 PHP 的两个函数:
date(): 将 Unix 时间戳格式化为可读的日期时间字符串。strtotime(): 将任何英文文本的日期时间描述解析为 Unix 时间戳。
date() 函数格式:
date(string $format, int $timestamp = time())
$format: 定义输出格式的字符串。Y: 4位数字完整年份 (如 2025)y: 2位数字年份 (如 23)m: 2位数字月份 (如 01-12)d: 2位数字日期 (如 01-31)H: 24小时制小时 (00-23)h: 12小时制小时 (01-12)i: 分钟 (00-59)s: 秒 (00-59)A: 大写的上午和下午 (AM 或 PM)- 常见组合:
Y-m-d H:i:s(2025-10-27 15:30:00),Y-m-d(2025-10-27),Y/m/d(2025/10/27)
$timestamp: 可选参数,要格式化的时间戳,如果省略,则使用当前时间。
在 DedeCMS 模板中转换 (最常用)
在 DedeCMS 的模板文件 (.htm) 中,我们使用 {dede:field} 标签来调用文章或栏目的字段,并结合 PHP 的函数进行修改。
转换文章发布时间 pubdate
文章的 pubdate 字段存储的是 Unix 时间戳。

示例1:将时间戳转换为 YYYY-MM-DD HH:MM:SS 格式
{dede:field.pubdate function='date("Y-m-d H:i:s",@me)'/}
@me: 这是 DedeCMS 模板中的一个特殊变量,代表当前标签的原始值。@mepubdate字段的时间戳。function='...': 这是调用 PHP 函数的语法。
示例2:只显示年月日,如 2025-10-27
{dede:field.pubdate function='date("Y-m-d",@me)'/}
示例3:显示 2025年10月27日 这种格式
{dede:field.pubdate function='date("Y年m月d日",@me)'/}
示例4:显示 10/27/2025 这种美式格式

{dede:field.pubdate function='date("m/d/Y",@me)'/}
转换文章更新时间 senddate
senddate 也是 Unix 时间戳,转换方法和 pubdate 完全一样。
{dede:field.senddate function='date("Y-m-d H:i:s",@me)'/}
转换其他字段
任何存储了时间戳的自定义字段或系统字段,都可以用同样的方式处理。
假设你有一个自定义字段 update_time,可以这样转换:
{dede:field name='update_time' function='date("Y-m-d",@me)'/}
name='update_time': 指定要操作的字段名。
在 PHP 文件中转换 (后端处理)
如果你在 DedeCMS 的 PHP 文件(如 include/helpers/ 下的文件,或者自定义的模块文件)中处理时间戳,可以直接使用 PHP 函数。
示例1:获取当前时间戳并格式化
<?php
// 获取当前时间戳
$timestamp = time();
// 将时间戳格式化为字符串
$formatted_date = date('Y-m-d H:i:s', $timestamp);
echo $formatted_date; // 输出类似: 2025-10-27 15:30:00
?>
示例2:将字符串转换为时间戳
<?php $date_string = '2025-10-27 15:30:00'; // 将日期字符串转换为时间戳 $timestamp = strtotime($date_string); echo $timestamp; // 输出类似: 1698381000 ?>
自定义函数 (高级用法)
如果你想在多个地方重复使用同一种时间格式,或者需要更复杂的逻辑,可以自定义一个函数,然后在模板中调用。
步骤1:创建自定义函数文件
在 include/extend.func.php 文件中添加你的自定义函数,如果这个文件不存在,你可以自己创建一个,DedeCMS 在很多情况下会自动加载这个文件。
// include/extend.func.php
/**
* 将时间戳转换为友好的时间格式(如:3天前,1小时前)
* @param int $timestamp Unix时间戳
* @return string
*/
function friendlyDate($timestamp) {
if (empty($timestamp)) {
return '';
}
$etime = time() - $timestamp;
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 => '分钟前',
1 => '秒前'
);
foreach ($interval as $secs => $unit) {
$d = $etime / $secs;
if ($d >= 1) {
$r = round($d);
return $r . $unit;
}
}
}
步骤2:在模板中调用自定义函数
你可以在任何模板中使用这个 friendlyDate 函数了。
{dede:field.pubdate function='friendlyDate(@me)'/}
如果文章发布时间是 2 小时前,这段代码就会直接显示 "2小时前"。
| 场景 | 方法 | 示例 |
|---|---|---|
| 模板中转换 | 使用 {dede:field} 标签的 function 属性 |
{dede:field.pubdate function='date("Y-m-d",@me)'/} |
| PHP文件中转换 | 直接使用 PHP 的 date() 或 strtotime() |
$date = date('Y-m-d', $timestamp); |
| 复杂或重复格式 | 在 extend.func.php 中自定义函数,然后在模板调用 |
{dede:field.pubdate function='friendlyDate(@me)'/} |
掌握了这些方法,你就可以在 DedeCMS 中自如地处理所有与时间戳相关的需求了。
