You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Elgg 2.6.3修改友好时间格式:替换相对时长为创建日期

修改Elgg 2.6.3的友好时间显示为具体创建日期

嘿,针对你想把Elgg 2.6.3里的相对时间(比如"posted 1780 Days ago")改成具体创建日期(比如"posted on Dec 20, 2011")的需求,我给你两种可行的方案,优先推荐第二种,避免修改核心文件影响后续升级:

方案1:直接修改核心函数(不推荐)

如果你能接受修改核心代码,直接替换elgg_get_friendly_time函数的逻辑即可。原函数的核心是计算时间差返回相对时长,我们把它改成直接输出格式化后的日期:

function elgg_get_friendly_time($time, $current_time = null) {
    // 验证时间戳有效性
    if (!is_numeric($time)) {
        return '';
    }

    // 用Elgg自带的本地化日期函数生成格式,也可以用PHP原生date()
    // elgg_echo_date支持多语言,适合多站点场景
    return "posted on " . elgg_echo_date($time, 'F j, Y');
    
    // 如果你不需要本地化,也可以用原生PHP函数:
    // return "posted on " . date('F j, Y', $time);
}

改动说明:

  • 移除了原函数中计算相对时间的所有逻辑,因为我们不需要再计算"多少天前"
  • 增加了时间戳有效性检查,避免无效值导致错误
  • elgg_echo_date(或PHPdate)生成你需要的"月份 日期, 年份"格式,再拼接"posted on"前缀

方案2:用插件钩子覆盖(推荐)

Elgg支持通过钩子(hook)来修改核心函数的返回值,这样不需要改动核心文件,后续升级Elgg也不会丢失修改。在你的自定义插件的init.php中添加以下代码:

// 注册friendly_time钩子,覆盖默认的相对时间显示
elgg_register_plugin_hook_handler('friendly_time', 'all', function($hook, $type, $returnvalue, $params) {
    $time = $params['time'];
    
    // 无效时间戳则保留原返回值
    if (!is_numeric($time)) {
        return $returnvalue;
    }
    
    // 返回格式化后的具体日期
    return "posted on " . elgg_echo_date($time, 'F j, Y');
});

这个方法更符合Elgg的开发规范,而且不会破坏核心文件,是更稳妥的做法。

内容的提问来源于stack exchange,提问作者Lili.brh

火山引擎 最新活动