菜鸟科技网

dedecms调用时间的方法是什么?

核心函数介绍

MyDate() 函数 - 最常用、最灵活

MyDate() 函数用于格式化输出一个特定的时间戳或当前时间,它的基本语法是:

dedecms调用时间的方法是什么?-图1
(图片来源网络,侵删)
MyDate('格式', '时间戳');
  • 格式: 这是你想要显示的时间样式,使用类似PHP date() 函数的格式字符。

    • %Y: 四位年份 ( 2025)
    • %m: 两位月份 (01-12)
    • %d: 两位日期 (01-31)
    • %H: 24小时制小时 (00-23)
    • %i: 分钟 (00-59)
    • %s: 秒 (00-59)
    • %y: 两位年份 (23)
    • %M: 月份的英文缩写 (Jan, Feb...)
    • %F: 月份的英文全称 (January, February...)
    • %A: 星期几的英文全称 (Sunday, Monday...)
    • %a: 星期几的英文缩写 (Sun, Mon...)
    • 注意: DedeCMS中推荐使用 %Y, %m 等带百分号的格式,而不是 Y, m,这样在某些模板引擎下更兼容。
  • 时间戳 (可选): 你想要格式化的Unix时间戳,如果省略此参数,函数将默认使用当前时间

GetDateTime() 函数 - 简单直接

GetDateTime() 函数主要用于获取文章的发布时间,它直接返回一个格式化好的字符串。

  • 基本语法: GetDateTime('时间戳')
  • 返回格式: Y-m-d H:i:s ( 2025-10-27 15:30:00)

这个函数相对简单,主要用于显示文章、栏目等内容的默认发布时间。

dedecms调用时间的方法是什么?-图2
(图片来源网络,侵删)

常用调用场景与实例

场景1:在文章列表页调用文章发布时间

这是最常见的需求,通常在 article_list.htm 或相关的列表模板中使用。

方法A:使用 MyDate() 函数(推荐,更灵活)

在列表循环中,arc 对象包含了当前文章的所有信息,pubdate 属性就是文章的发布时间戳。

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

代码解析:

  • [field:pubdate ...]: 获取文章的发布时间戳。
  • function="MyDate('%Y-%m-%d', @me)": 这是一个字段函数。
    • @me: 代表当前字段的值,也就是 pubdate 的时间戳。
    • MyDate('%Y-%m-%d', @me): 将这个时间戳格式化为 年-月-日 的形式。

如果你想显示更详细的时间,年-月-日 时:分:

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

方法B:使用 GetDateTime() 函数

{dede:arclist titlelen='40' row='10'}
    <li>
        <span>[field:pubdate function="GetDateTime(@me)"/]</span>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

代码解析:

  • [field:pubdate function="GetDateTime(@me)"/]: 同样是字段函数,调用 GetDateTime() 将时间戳格式化为 Y-m-d H:i:s

场景2:在文章内容页调用文章发布时间

页模板 article_article.htm 中,可以使用 {dede:field} 标签来调用。

方法A:使用 MyDate() 函数

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

方法B:使用 GetDateTime() 函数

发布时间:{dede:field.pubdate function='GetDateTime(@me)'/}

场景3:调用当前系统时间(非文章时间)

如果你想显示页面被加载时的当前时间,而不是文章的发布时间,可以直接调用 MyDate() 而不传参数。

示例:在页脚显示当前年份

&copy; 2025 - {dede:mydate function='MyDate("%Y")'/} 公司名称. All Rights Reserved.

当页面被访问时,{dede:mydate/} 会自动获取当前服务器时间并格式化为年份。


场景4:调用栏目更新时间

在栏目列表页或内容页,你可能需要显示栏目的最后更新时间,这可以通过 {dede:global} 标签结合SQL查询来实现,或者在列表循环中利用 {dede:arclist}sortup(按更新时间排序)特性来获取。

一个简单的方法是在列表页循环中,获取该栏目下最新一篇文章的时间作为栏目更新时间。

{dede:arclist typeid='栏目ID' row='1' sortup='1'}
    本栏目最后更新时间:[field:pubdate function="MyDate('%Y-%m-%d', @me)"/]
{/dede:arclist}
  • typeid='栏目ID': 指定要查询的栏目。
  • row='1': 只取一篇文章。
  • sortup='1': 按更新时间降序排列,这样取到的就是该栏目最新的一篇文章。

高级技巧:时间格式化中的“、“昨天”

为了让时间显示更人性化,我们可以结合PHP代码和自定义函数来实现“、“昨天”的效果。

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

打开你的DedeCMS安装目录下的 include/extend.func.php 文件,在文件末尾添加以下代码:

/**
 * 将时间戳转换为“、“昨天”或具体日期格式
 * @param int $timestamp 时间戳
 * @param string $format 具体日期格式 (默认 'Y-m-d H:i')
 * @return string
 */
function GetHumanTime($timestamp, $format = 'Y-m-d H:i') {
    $today = strtotime(date('Y-m-d', time())); // 今天0点的时间戳
    $yesterday = $today - 86400; // 昨天0点的时间戳
    if ($timestamp >= $today) {
        // 
        return '' . date('H:i', $timestamp);
    } elseif ($timestamp >= $yesterday && $timestamp < $today) {
        // 昨天
        return '昨天 ' . date('H:i', $timestamp);
    } else {
        // 更早的时间
        return MyDate($format, $timestamp);
    }
}

步骤2:在模板中调用这个新函数

现在你可以在任何地方调用这个 GetHumanTime 函数了。

在文章列表页中使用:

{dede:arclist titlelen='40' row='10'}
    <li>
        <span>[field:pubdate function="GetHumanTime(@me)"/]</span>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

效果:

  • 如果文章是今天发布的,会显示 15:30
  • 如果文章是昨天发布的,会显示 昨天 10:15
  • 如果文章是更早发布的,会显示 2025-10-26 09:00(或其他你设定的格式)。
函数 语法 用途 灵活性
MyDate() MyDate('格式', '时间戳') 最常用,格式化任意时间戳 ,可自定义各种格式
GetDateTime() GetDateTime('时间戳') 简单调用文章发布时间 ,格式固定为 Y-m-d H:i:s
自定义函数 GetHumanTime() 实现特殊需求,如“、“昨天” 极高,可完全自定义逻辑

对于绝大多数情况,直接使用 MyDate() 函数配合字段函数就能满足你的需求,希望这份详细的教程能帮助你更好地在DedeCMS中调用和格式化时间!

分享:
扫描分享到社交APP
上一篇
下一篇