
本文介绍如何将 PHP 的 filemtime() 返回的时间戳转换为用户友好的相对时间格式(如“30秒前”“2小时前”),并封装成可复用函数,避免重复代码。
本文介绍如何将 php 的 `filemtime()` 返回的时间戳转换为用户友好的相对时间格式(如“30秒前”“2小时前”),并封装成可复用函数,避免重复代码。
在 Web 开发中,直接显示绝对时间(如 2024年06月15日 14:23:05)虽准确,但对用户不够直观;相比之下,“2分钟前”“1小时前”等相对时间更能提升体验。PHP 原生不提供类似 JavaScript moment.js 或 Intl.RelativeTimeFormat 的内置相对时间功能,但可通过简单计算轻松实现。
以下是一个健壮、可复用的函数 formatFileAge(),它接收文件路径,返回距当前时间的相对描述(精确到小时、分钟或秒),并自动忽略更小单位(如不显示“1小时0分钟32秒”,而仅显示“1小时”):
function formatFileAge($filepath) {
if (!is_file($filepath)) {
return 'File not found';
}
$modified = filemtime($filepath);
$now = time();
$diff = $now - $modified;
// 处理未来时间(极少见,但需防御)
if ($diff 0) {
return $days . ' day' . ($days !== 1 ? 's' : '') . ' ago';
} elseif ($hours > 0) {
return $hours . ' hour' . ($hours !== 1 ? 's' : '') . ' ago';
} elseif ($minutes > 0) {
return $minutes . ' minute' . ($minutes !== 1 ? 's' : '') . ' ago';
} else {
return $seconds . ' second' . ($seconds !== 1 ? 's' : '') . ' ago';
}
}
✅ 使用示例:
<h6 style="text-align: right">
<?php echo "Content last changed: " . formatFileAge("file.js"); ?>
</h6>
? 关键说明与注意事项:
- ✅ 函数首先校验文件是否存在(is_file()),避免 filemtime() 报错;
- ✅ 支持单复数语法(如 1 minute vs 2 minutes),提升语言准确性;
- ✅ 按时间粒度从大到小判断(天 → 小时 → 分钟 → 秒),确保输出最自然的单位;
- ⚠️ 注意:filemtime() 受服务器时区影响,请确保 date_default_timezone_set() 已正确配置(如 date_default_timezone_set('Asia/Shanghai'));
- ⚠️ 若需更高精度(如“刚刚”“约1小时”)或国际化支持(多语言),建议扩展为基于 DateTime 对象的版本,或集成第三方库(如 carbon)。
该函数轻量、无依赖、开箱即用,适用于 CMS 内容更新提示、缓存状态标识、日志时间摘要等多种场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











