dede列表页如何调用时间?

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

使用 GetDateTime() 函数

这是在列表页循环({dede:list})中调用文章时间的最标准、最常用的方法。

dede列表页调用时间
(图片来源网络,侵删)

基础调用:显示完整日期和时间

这个方法会显示文章发布的完整日期和时间,格式为 YYYY-MM-DD HH:MM:SS

代码位置:{dede:list} 标签对之间使用。

代码示例:

{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>发布时间:[field:pubdate function="GetDateTime(@me)"/]</span>
    </li>
{/dede:list}

代码解释:

dede列表页调用时间
(图片来源网络,侵删)
  • [field:pubdate/]:这是获取文章发布时间戳的原始字段,它返回的是一个 Unix 时间戳(1712345678)。
  • function="GetDateTime(@me)":这是一个函数调用。
    • function="...":告诉DedeCMS这里要执行一个PHP函数。
    • @me:这是一个特殊变量,代表当前字段的原始值,也就是 [field:pubdate/] 得到的时间戳。
    • GetDateTime():是DedeCMS内置的一个PHP函数,它的作用就是将Unix时间戳格式化为 YYYY-MM-DD HH:MM:SS 的字符串。

进阶用法:自定义时间格式

很多时候,我们不需要显示完整的时间,只需要显示年-月-日,或者年-月等,这时,我们可以使用 MyDate() 函数,它比 GetDateTime() 更灵活。

使用 MyDate() 函数自定义格式

MyDate() 函数可以让你自由定义输出时间的格式。

语法: [field:pubdate function="MyDate('格式', @me)"/]

常用格式占位符:

  • Y:四位数的年份 (2025)
  • m:两位数的月份 (04)
  • d:两位数的日 (08)
  • H:24小时制的小时 (15)
  • i:分钟 (08)
  • s:秒 (30)
  • M:英文月份缩写 (Apr)
  • F:英文月份全称 (April)

代码示例:

示例1:只显示 年-月-日

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

输出效果: 2025-04-08

示例2:显示 年月日 时分

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

输出效果: 2025-04-08 15:30

示例3:显示中文格式的 年月日

{dede:list}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y年m月d日', @me)"/]</span>
    </li>
{/dede:list}

输出效果: 2025年04月08日


特殊需求调用

显示文章发布后的“多久前”(如:3天前、2小时前)

这种“人性化”的时间显示在现在非常流行,DedeCMS 没有内置这个函数,但我们可以通过自定义一个函数来实现。

步骤:

第一步:在 /include/extend.func.php 文件中添加自定义函数

打开你网站根目录下的 /include/extend.func.php 文件,在文件末尾的 ?> 之前,添加以下PHP代码:

/**
 * 将时间戳转换为“X天前”或“X小时前”等格式
 * @param string $from Unix时间戳
 * @return string
 */
function formatTimeAgo($from) {
    $now = time();
    $diff = $now - $from;
    // 如果时间差小于60秒
    if ($diff < 60) {
        return '刚刚';
    }
    // 如果时间差小于3600秒(1小时)
    elseif ($diff < 3600) {
        return floor($diff / 60) . '分钟前';
    }
    // 如果时间差小于86400秒(1天)
    elseif ($diff < 86400) {
        return floor($diff / 3600) . '小时前';
    }
    // 如果时间差小于2592000秒(30天)
    elseif ($diff < 2592000) {
        return floor($diff / 86400) . '天前';
    }
    // 如果时间差小于31536000秒(365天)
    elseif ($diff < 31536000) {
        return floor($diff / 2592000) . '个月前';
    }
    // 超过1年
    else {
        return floor($diff / 31536000) . '年前';
    }
}

第二步:在列表页模板中调用这个函数

保存并关闭 extend.func.php 文件后,在你的列表页模板(list_*.htm)中,使用如下方式调用:

{dede:list}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="formatTimeAgo(@me)"/]</span>
    </li>
{/dede:list}

代码解释:

  • 我们在 extend.func.php 中定义了一个名为 formatTimeAgo() 的函数。
  • 在模板中,我们通过 function="formatTimeAgo(@me)" 来调用它,并将文章的时间戳 @me 作为参数传递进去。
  • 这个函数会根据当前时间和文章发布时间的差值,返回“刚刚”、“几分钟前”等字符串。

总结与对比

方法 代码示例 输出格式 适用场景
GetDateTime() [field:pubdate function="GetDateTime(@me)"/] YYYY-MM-DD HH:MM:SS 需要显示精确发布时间的场景,如后台管理、新闻列表。
MyDate() [field:pubdate function="MyDate('Y-m-d', @me)"/] Y-m-d (可自定义) 最常用,可以根据设计需要自由调整时间格式,如列表页、文章归档页。
自定义函数 [field:pubdate function="formatTimeAgo(@me)"/] X天前X小时前 社交化、人性化的时间显示,如博客、论坛、动态信息流。

最佳实践建议:

对于绝大多数DedeCMS列表页的需求,强烈推荐使用 MyDate() 函数,因为它既灵活又高效,只需根据你的设计稿调整 MyDate() 中的格式字符串即可,Y-m-dY.m.d

希望这些详细的解释和示例能帮助你完美地在列表页调用时间!

-- 展开阅读全文 --
头像
织梦UTF8安装教程如何正确操作?
« 上一篇 03-03
Verilog与C语言的核心差异与应用场景对比?
下一篇 » 03-03

相关文章

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

目录[+]