功能说明

该 PHP 函数 secondsFormat 用于将时间戳转换为更人性化的相对时间格式(如“刚刚”、“X分钟前”),或特定日期格式(如“m月d日”)。适用于社交平台、评论系统等需要友好时间显示的场景。


核心逻辑分解

时间差计算
通过当前时间戳 $now 和输入时间戳 $time 的差值 $cha 判断时间间隔。

多级条件判断

  1. 小于60秒:返回“刚刚”。
  2. 超过4天
    • 同一年显示“m月d日”(如 05月20日)。
    • 跨年显示“Y年m月d日”(如 2023年05月20日)。
  3. 4天内
    • 按天数分级(1天前/2天前/3天前)。
    • 不足1天按小时显示(如 5小时前)。
    • 不足1小时按分钟显示(如 30分钟前)。

优化建议

时区处理
确保 time()date() 使用相同的时区设置,可通过 date_default_timezone_set() 提前配置。

边界值优化
当前代码中 $dz>3 实际包含4天内的部分情况(如3天23小时),与超过4天的逻辑略有重叠。建议调整条件顺序或明确边界。

代码简洁性
部分分支可合并,例如:

if ($dz >= 1) {
    return $dz . '天前';
}

多语言支持
若需国际化,可将字符串(如“刚刚”)提取为变量或语言包。


完整代码(优化版)

function secondsFormat($time) {
    $now = time();
    $diff = $now - $time;
    
    if ($diff < 60) {
        return '刚刚';
    }

    if ($diff >= 4 * 24 * 60 * 60) {
        return (date('Y', $now) == date('Y', $time)) 
            ? date("m月d日", $time) 
            : date("Y年m月d日", $time);
    }

    $minutes = floor($diff / 60);
    $hours = floor($minutes / 60);
    $days = floor($hours / 24);

    if ($days >= 1) {
        return $days . '天前';
    }
    if ($hours >= 1) {
        return $hours . '小时前';
    }
    return $minutes . '分钟前';
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐