dede日期格式化如何自定义显示格式?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

在列表页、文章页等模板文件中直接格式化

这是最常见的情况,我们通常使用 DedeCMS 的内置函数 MyDate() 来完成。

dede 日期格式化
(图片来源网络,侵删)

函数语法

MyDate(formatString, timestamp)

  • formatString (必需): 你想要的日期格式,这里的格式化字符与 PHP 的 date() 函数基本一致。
  • timestamp (可选): Unix 时间戳,如果不提供,默认使用当前时间。

常用格式化字符

字符 说明 示例
Y 4位数字的完整年份 2025
y 2位数字的年份 23
m 带前导0的数字月份 (01-12) 08
n 不带前导0的数字月份 (1-12) 8
d 带前导0的日期 (01-31) 09
j 不带前导0的日期 (1-31) 9
H 24小时制,带前导0 (00-23) 14
h 12小时制,带前导0 (01-12) 02
i 带前导0的分钟 (00-59) 05
s 带前导0的秒数 (00-59) 09
D 英文星期几的3个字母 (Sun-Sat) Mon
F 英文完整的月份名称 (January-December) August
w 数字表示的星期几 (0代表周日, 6代表周六) 1
A 大写的上午和下午 (AM/PM) PM

实际应用示例

假设你有一个文章变量 pubdate (发布时间),它存储的是 Unix 时间戳。

示例 1:格式化为 年-月-日

{dede:field.pubdate function='MyDate("Y-m-d",@me)'/}

输出:2025-08-09

dede 日期格式化
(图片来源网络,侵删)

示例 2:格式化为 年/月/日 时:分

{dede:field.pubdate function='MyDate("Y/m/d H:i",@me)'/}

输出:2025/08/09 14:30

示例 3:格式化为 年-月-日 时:分:秒

{dede:field.pubdate function='MyDate("Y-m-d H:i:s",@me)'/}

输出:2025-08-09 14:30:25

dede 日期格式化
(图片来源网络,侵删)

示例 4:格式化为 月-日 在列表页,通常只需要显示月和日。

{dede:field.pubdate function='MyDate("m-d",@me)'/}

输出:08-09

示例 5:格式化为中文格式,如 2025年08月09日

{dede:field.pubdate function='MyDate("Y年m月d日",@me)'/}

输出:2025年08月09日


在自定义函数或PHP代码中格式化

如果你在 include/common.func.php 文件中写了自定义函数,或者在模板中使用了 {dede:php} 标签,那么你可以直接使用 PHP 原生的 date() 函数,这更灵活。

使用 PHP 的 date() 函数

date(formatString, timestamp)

用法和 MyDate() 几乎一样,但更符合 PHP 的标准。

示例:在自定义函数中 假设你在 include/common.func.php 中添加了一个函数:

function getShortDate($timestamp) {
    return date('m-d', $timestamp);
}

然后在模板中调用:

{dede:field.pubdate function='getShortDate(@me)'/}

示例:在 {dede:php} 标签中

{dede:php}
    $timestamp = time(); // 获取当前时间戳
    $formattedDate = date('Y年m月d日 H时i分', $timestamp);
    echo $formattedDate;
{/dede:php}

输出:2025年08月09日 14时30分


修改后台发布文章时的默认日期格式

有时候你希望后台发布文章时,默认的日期显示格式不是 Y-m-d H:i:s,而是其他格式,这需要修改 PHP 文件。

操作步骤:

  1. 找到文件:打开 dede/archives_add.php (用于发布文章) 或 dedi/article_add.php 等相关文件。
  2. 定位代码:搜索 $pubdatesendtime 变量,你会找到类似这样的代码:
    // ... 其他代码 ...
    $pubdate = GetMkTime($pubdate); // 处理发布日期
    $senddate = time(); // 默认为当前时间
    // ... 其他代码 ...
  3. 修改默认值:如果你想修改 senddate 的默认显示格式,可以找到它在模板中对应的变量,通常是在发布文章的表单里,查找 input 标签的 value 属性,但这比较复杂。

一个更简单的方法是,在文章保存到数据库之前,对 $pubdate$senddate 进行一次格式化,但这通常不推荐,因为这会改变数据库存储的原始时间戳。

更推荐的方案是: 保持数据库中存储标准的 Unix 时间戳,在前台模板(场景一)和后台显示列表时,统一使用 MyDate() 函数来格式化,这样,无论你想在后台或前台显示成什么格式,都只需要修改模板或标签,而不用动核心文件,更安全。


修改列表页的日期显示(列表项 list 循环中)

在列表页模板(通常是 list_article.htm),日期通常在 {dede:list} 循环内部,通过 {field:pubdate} 来调用。

格式化方法和普通字段一样,直接在标签里使用 function 即可。

示例 list_article.htm 片段:

<ul>
    {dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="date">[field:pubdate function='MyDate("Y-m-d",@me)'/]</span>
    </li>
    {/dede:list}
</ul>

这样,每篇文章的发布日期都会被格式化为 年-月-日 的形式。


总结与最佳实践

需求场景 推荐方法 示例
前台模板(列表、文章页) 使用 MyDate() 函数 {dede:field.pubdate function='MyDate("Y-m-d",@me)'/}
自定义函数 使用 PHP 原生 date() 函数 return date('Y-m-d', $timestamp);
后台代码修改 尽量避免,保持时间戳原始性,通过模板控制显示格式。 -
列表页循环内 使用 MyDate() 函数 [field:pubdate function='MyDate("m-d",@me)'/]

核心要点:

  1. MyDate() 是 DedeCMS 提供给模板的便捷函数,专门用来格式化时间戳。
  2. @me 是当前字段的占位符,在 function 中必须使用,它代表 {dede:field.xxx} 的原始值(在这里就是时间戳)。
  3. 始终在数据库中存储 Unix 时间戳,这是最标准、最灵活的方式,所有的格式化工作都应在输出时(即模板层)完成。

希望这份详细的指南能帮助你完全掌握 DedeCMS 的日期格式化!

-- 展开阅读全文 --
头像
织梦网站安装视频教程具体步骤是什么?
« 上一篇 今天
R语言如何加载C语言程序?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]