You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现时间格式化:7天内显时间间隔 超7天显月日跨年加年份

修改后完整代码

public function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    // 超过7天走日期格式化逻辑
    if ($diff->days > 7) {
        // 判断是否为当前年份
        if ($ago->format('Y') === $now->format('Y')) {
            return $ago->format('j M');
        } else {
            return $ago->format('j M Y');
        }
    }

    // 7天及以内保留原有「多久前」逻辑
    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'year',
        'm' => 'month',
        'w' => 'week',
        'd' => 'day',
        'h' => 'hour',
        'i' => 'minute',
        's' => 'second',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
        } else {
            unset($string[$k]);
        }
    }

    if (!$full) $string = array_slice($string, 0, 1);

    return $string ? implode(', ', $string) . ' ago' : 'just now';
}

实现说明

  • 用DateInterval的days属性获取两个时间的总间隔天数,不受跨月、跨年影响,判断逻辑准确
  • 日期格式化完全匹配需求:
    • 同一年的超7天时间,输出日期 月份简写格式,示例为5 Jan
    • 非本年的超7天时间,自动追加年份,示例为5 Jan 2022
  • 7天及以内的展示逻辑完全保留原有实现,原有的$full参数、多时间单位拼接规则都可正常使用
  • 如果需要显示中文月份,可将格式符中的M替换为中文月份映射,或使用IntlDateFormatter类实现本地化输出

内容的提问来源于stack exchange,提问作者Shiva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:00:00