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

PHP如何通过filemtime()计算文件修改时间与当前时间的间隔

可复用文件相对修改时间展示实现方案

实现逻辑

你可以把时间计算、单位匹配、单复数处理的逻辑全部封装为独立全局函数,所有需要展示的位置直接调用函数传入文件路径即可,不需要重复编写零散计算逻辑。
核心逻辑:

  • 先做文件存在性、可读性校验,避免文件不存在时抛出运行报错
  • 用filemtime()获取文件修改时间戳,和当前时间戳计算秒级差值
  • 按年、月、日、小时、分钟、秒的从大到小粒度匹配时间单位,自动处理单复数格式
  • 返回标准化的展示字符串,可直接输出到页面

完整函数代码

/**
 * 生成文件最后修改时间的相对格式展示文本
 * @param string $filePath 要检测的目标文件路径
 * @return string 格式化后的展示文本
 */
function getFileLastChangeText(string $filePath): string
{
    // 兜底处理:文件不存在或不可读时返回未知状态
    if (!file_exists($filePath) || !is_readable($filePath)) {
        return "Content last changed: unknown";
    }

    $modifyTimestamp = filemtime($filePath);
    $diffSeconds = time() - $modifyTimestamp;

    // 时间单位配置,按粒度从大到小排列,每个单位对应秒数
    $unitMap = [
        ['name' => 'year', 'sec' => 31536000],
        ['name' => 'month', 'sec' => 2592000],
        ['name' => 'day', 'sec' => 86400],
        ['name' => 'hour', 'sec' => 3600],
        ['name' => 'minute', 'sec' => 60],
        ['name' => 'second', 'sec' => 1],
    ];

    foreach ($unitMap as $unit) {
        if ($diffSeconds >= $unit['sec']) {
            $count = floor($diffSeconds / $unit['sec']);
            // 数值不为1时自动补复数后缀s
            $unitName = $count != 1 ? $unit['name'] . 's' : $unit['name'];
            return sprintf("Content last changed: %d %s", $count, $unitName);
        }
    }

    return "Content last changed: just now";
}

调用方式

把函数放在项目公共引入文件中,原来的内联输出代码直接替换为函数调用即可:

<h6 style="text-align: right">
    <?php echo getFileLastChangeText("file.js"); ?>
</h6>

效果说明

  • 修改时间间隔30秒:输出Content last changed: 30 seconds
  • 修改时间间隔5分钟:输出Content last changed: 5 minutes
  • 修改时间间隔2小时:输出Content last changed: 2 hours
  • 修改时间间隔1天:输出Content last changed: 1 day(自动适配单数格式)
  • 刚修改的文件会返回Content last changed: just now
  • 文件不存在/无读取权限时返回Content last changed: unknown,不会中断页面运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:33:16