dede列表页时间如何自定义显示格式?

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

最基本的时间调用标签

在列表页模板(通常是 list_article.htm)中,最常用的时间标签是 pubdatesenddate

dede 列表页时间
(图片来源网络,侵删)
  • pubdate: 文章的发布时间(发布时间)。
  • senddate: 文章的录入时间(投稿时间)。

通常情况下,我们使用 pubdate

调用完整的时间戳(不推荐直接使用)

[field:pubdate function='strftime("%Y-%m-%d %H:%M:%S",@me)'/]

这行代码会输出类似 2025-10-27 15:30:00 的格式,虽然可用,但不够灵活,通常我们会用更简洁的方式。

调用标准格式(年-月-日)

这是最常用、最简单的方式,直接输出 YYYY-MM-DD 格式的日期。

[field:pubdate function='MyDate("Y-m-d",@me)'/]

输出效果:2025-10-27

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

调用其他常用格式

通过修改 MyDate 函数的第二个参数,可以轻松改变日期格式。

格式代码 说明 示例
Y 4位年份 2025
y 2位年份 23
m 2位月份(带前导0) 10
n 月份(不带前导0) 10
d 2位日期(带前导0) 27
j 日期(不带前导0) 27
H 24小时制小时(带前导0) 15
i 分钟(带前导0) 30
s 秒(带前导0) 00
F 完整的月份名称 October
M 3个字母的月份缩写 Oct
D 3个字母的星期缩写 Fri

示例:

  • 格式:年/月/日

    [field:pubdate function='MyDate("Y/m/d",@me)'/]

    输出:2025/10/27

    dede 列表页时间
    (图片来源网络,侵删)
  • 格式:月-日

    [field:pubdate function='MyDate("m-d",@me)'/]

    输出:10-27

  • 格式:年月日时分

    [field:pubdate function='MyDate("Y-m-d H:i",@me)'/]

    输出:2025-10-27 15:30


更高级的时间处理

显示“X天前”、“X小时前”等相对时间

这种格式在新闻、博客类网站中非常流行,能提升用户体验,我们需要使用自定义函数来实现。

操作步骤:

  1. 找到并打开 include/extendfun.php 文件

  2. 在文件末尾的 ?> 之前,添加以下自定义函数:

    // 时间格式化,将时间戳转为“刚刚”、“X分钟前”、“X小时前”等
    function formatTime($smtime) {
        $etime = time() - $smtime;
        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;
            }
        }
    }
  3. 保存 extendfun.php 文件

  4. 在列表页模板中使用

    [field:pubdate function='formatTime(@me)'/]

    输出效果

    • 如果文章是5分钟前发布的,显示:5分钟前
    • 如果文章是3小时前发布的,显示:3小时前
    • 如果文章是昨天发布的,显示:1天前
    • 如果文章是30天前发布的,显示:1个月前

综合示例:列表页时间调用代码

下面是一个典型的列表页文章循环代码片段,展示了如何结合标题、摘要和时间来显示一篇文章。

{dede:list pagesize='10'}
    <li>
        <!-- 文章标题,点击跳转到详情页 -->
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
        <!-- -->
        <p>[field:description function='cn_substr(@me, 100)']...</p>
        <!-- 文章发布时间,这里使用“X天前”的格式 -->
        <span class="post-time">发布于:[field:pubdate function='formatTime(@me)'/]</span>
    </li>
{/dede:list}

在这个例子中:

  • [field:arcurl/] 是文章的链接地址。
  • [field:title/] 是文章标题。
  • [field:description/] 是文章摘要,cn_substr 函数用于截取前100个字符。
  • [field:pubdate function='formatTime(@me)'/] 调用了我们刚刚创建的自定义函数来显示相对时间。

常见问题与注意事项

  1. 为什么我的时间不显示或显示错误?

    • 检查标签拼写:确保 pubdatesenddate 拼写正确。
    • 检查函数名:确保 MyDate 或自定义的 formatTime 函数名拼写正确。
    • 检查缓存:DedeCMS 有强大的缓存机制,修改模板后,请务必在后台 “系统” -> “一键更新网站” -> “更新HTML” 中更新你的列表页,或者直接清除缓存。
    • 检查文件权限:确保你有权限修改 extendfun.php 文件,并且保存成功。
  2. strftimeMyDate 有什么区别?

    • strftime 是 PHP 的原生函数,依赖于服务器的本地化设置。
    • MyDate 是 DedeCMS 自定义的函数,更简单、更常用,并且不受服务器环境的影响,推荐使用 MyDate
  3. 如何只显示“月-日”格式? 直接使用 [field:pubdate function='MyDate("m-d",@me)'/] 即可。

希望这份详细的指南能帮助您在 DedeCMS 列表页完美地调用和显示时间!

-- 展开阅读全文 --
头像
dede上传图片乱码,如何解决?
« 上一篇 04-23
dede首页栏目高度如何自定义调整?
下一篇 » 04-23

相关文章

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

目录[+]