织梦时间戳如何修改调用?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 织梦建站 正文
  1. 修改/设置时间戳:指在发布或编辑文章时,如何设置或修改文章的发布时间。
  2. 调用时间戳:指在前台模板文件中,如何调用并显示文章的时间信息,并将其格式化为你想要的样式。

我会分两部分详细说明,并提供代码示例。

织梦时间戳修改调用
(图片来源网络,侵删)

第一部分:如何修改文章的时间戳

在织梦中,文章的发布时间存储在数据库的 dede_archives 表的 senddate 字段中,修改时间戳,本质上就是修改这个字段的值。

后台手动修改(最简单)

  1. 登录织梦后台。
  2. 进入「内容管理」 -> 「普通文档管理」。
  3. 找到你想要修改的文章,点击标题进入编辑页面。
  4. 在编辑页面,找到右上角的「文档发布时间」选项。
  5. 点击旁边的日历图标,选择你想要的新日期和时间。
  6. 点击「保持」或「更新」按钮即可。

这种方法适合少量文章的修改。

使用SQL命令批量修改(适合大量修改)

如果你需要将很多文章的时间修改为某个特定时间(统一改为发布当天),或者进行批量调整,直接操作数据库最高效。

操作步骤:

织梦时间戳修改调用
(图片来源网络,侵删)
  1. 登录你的网站数据库管理工具(如 phpMyAdmin)。
  2. 选择你的织梦数据库(通常是 dedecms 或你自定义的名称)。
  3. 点击「SQL」选项卡,执行SQL语句。

常用SQL示例:

示例1:将所有文章的发布时间修改为当前时间

UPDATE dede_archives SET senddate = UNIX_TIMESTAMP(NOW());
  • NOW() 获取当前系统时间。
  • UNIX_TIMESTAMP() 将时间戳转换为Unix时间戳格式,这是 senddate 字段存储的格式。

示例2:将所有文章的发布时间修改为2025年1月1日 12:00:00

UPDATE dede_archives SET senddate = UNIX_TIMESTAMP('2025-01-01 12:00:00');

示例3:将某个栏目ID为5的所有文章,发布时间修改为文章的更新时间(pubdate)

织梦时间戳修改调用
(图片来源网络,侵删)
UPDATE dede_archives SET senddate = pubdate WHERE typeid = 5;
  • typeid = 5 是条件,你可以修改成你自己的栏目ID。

⚠️ 重要提醒:

  • 备份数据库! 在执行任何批量更新操作前,务必备份数据库,以防误操作导致数据丢失。
  • dede_archives 是默认的表前缀,如果你的织梦安装时修改了表前缀(mycms_),请将SQL语句中的 dede_archives 替换为你的实际表前缀。

第二部分:如何在模板中调用和格式化时间戳

织梦提供了强大的标签来调用文章信息,时间戳的调用和格式化主要通过 arclistarclistfield 等标签实现。

基本调用标签

织梦在循环文章时,会生成一个对象,我们可以通过 field 标签来获取它的属性。

  • 获取Unix时间戳

    {field.senddate}

    这会输出一串数字,1678886400

  • 获取格式化后的日期(常用): 织梦内置了 MyDate 函数来格式化时间戳。

    {MyDate('m-d', field.senddate)}

    这会输出 03-15 这样的格式。

MyDate 函数详解

MyDate 函数是格式化时间的关键,它的语法是 {MyDate('格式', 时间戳)}

  • 第一个参数:格式化字符串

    • Y:四位数的年份,2025
    • y:两位数的年份,23
    • m:两位数的月份,03
    • d:两位数的日期,15
    • H:24小时制的小时,14
    • h:12小时制的小时,02
    • i:分钟,05
    • s:秒,09
    • 其他字符会原样输出,、 等。
  • 第二个参数:时间戳 通常是 field.senddate(发布时间)或 field.pubdate(更新时间)。

实际应用场景

在首页或列表页(arclist标签)中显示文章发布日期

假设你想要显示 2025-03-15 这样的格式。

{dede:arclist row="10" titlelen="30"}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
{/dede:arclist}
  • 这里我们使用了 pubdate(更新时间)和 function 来调用 MyDate@me 代表当前字段的值。
  • 如果想用发布时间,把 pubdate 换成 senddate 即可。

页(article_article.htm)中显示发布时间

发布时间:{MyDate('Y-m-d H:i:s', field.senddate)}

这会输出 2025-03-15 14:30:00

显示“X天前”或“刚刚”这样的相对时间

这是一个很常见的需求,可以通过自定义函数来实现。

步骤:

  1. 打开 /include/extend.func.php 文件(如果不存在,请创建一个)。

  2. 在文件末尾添加以下PHP函数:

    /**
     * 将时间戳转换为多少天前、多少小时前等
     * @param int $ptime 时间戳
     * @return string
     */
    function timeBefore($ptime) {
        $etime = time() - $ptime;
        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                      => '分钟前',
        );
        foreach ($interval as $secs => $unit) {
            $d = $etime / $secs;
            if ($d >= 1) {
                $r = round($d);
                return $r . $unit;
            }
        }
    }
  3. 在模板中调用这个函数

    {dede:field.senddate function="timeBefore(@me)"/}

    如果文章是1小时内发布的,就会显示 XX分钟前;如果是3天前发布的,就会显示 3天前

需求 方法 示例代码
修改单个文章时间 后台手动编辑 内容管理 -> 普通文档管理 -> 编辑文章 -> 修改发布时间
批量修改文章时间 数据库SQL命令 UPDATE dede_archives SET senddate = UNIX_TIMESTAMP(NOW());
调用并格式化日期 使用 MyDate 函数 {MyDate('Y-m-d', field.senddate)}
调用相对时间(如“X天前”) 自定义函数 extend.func.php 中添加函数,模板中用 {field.senddate function="timeBefore(@me)"/} 调用

希望这份详细的指南能帮助你完全掌握织梦时间戳的修改和调用!

-- 展开阅读全文 --
头像
dede模板怎么用?新手必看指南?
« 上一篇 04-21
childptr在C语言中具体指什么?
下一篇 » 04-21

相关文章

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

目录[+]