
本文介绍如何使用 PHP 编写一个可复用函数,将 filemtime() 获取的文件修改时间与当前时间对比,以“X 小时/X 分钟/X 秒前”形式动态显示相对时间,适用于多处调用场景。
本文介绍如何使用 php 编写一个可复用函数,将 `filemtime()` 获取的文件修改时间与当前时间对比,以“x 小时/x 分钟/x 秒前”形式动态显示相对时间,适用于多处调用场景。
要实现“文件 X 分钟前更新”这类人性化的时间提示,核心在于计算当前时间与文件最后修改时间的时间差(单位:秒),再按优先级(小时 → 分钟 → 秒)降序格式化输出。以下是一个健壮、易复用的封装函数:
/**
* 获取文件相对于当前时间的简明相对时间描述
* @param string $file 文件路径(支持相对路径)
* @return string 如 "5 minutes"、"1 hour"、"42 seconds";若文件不存在或无法读取,返回空字符串
*/
function formatFileAge($file) {
if (!is_file($file) || !is_readable($file)) {
return '';
}
$diff = time() - filemtime($file);
if ($diff < 0) {
return 'in the future'; // 理论上不应出现,但保留防御性处理
}
$hours = floor($diff / 3600);
$minutes = floor(($diff % 3600) / 60);
$seconds = $diff % 60;
if ($hours > 0) {
return $hours . ($hours === 1 ? ' hour' : ' hours');
}
if ($minutes > 0) {
return $minutes . ($minutes === 1 ? ' minute' : ' minutes');
}
if ($seconds > 0) {
return $seconds . ($seconds === 1 ? ' second' : ' seconds');
}
return 'just now';
}使用示例(替换原内联代码):
<h6 style="text-align: right">
<?php echo "Content last changed: " . formatFileAge("file.js") . " ago"; ?>
</h6>✅ 关键注意事项:
- 函数内置了 is_file() 和 is_readable() 检查,避免因文件不存在或权限问题导致 filemtime() 警告;
- 支持单复数语法(如 1 hour vs 2 hours),提升用户体验;
- 返回 'just now' 处理 diff === 0 的边界情况;
- 建议将该函数定义在公共工具文件(如 helpers.php)中,通过 require_once 统一加载,确保全站复用;
- 若需更高精度(如天、月)或国际化支持,可基于此扩展为更通用的 time_ago() 工具函数。
该方案简洁、安全、可维护,完美替代重复的内联逻辑,显著提升代码质量与可读性。
立即学习“PHP免费学习笔记(深入)”;



















