当前位置: 首页> 最新文章列表> 使用 gettimeofday 配合 filemtime 获取文件修改时间差

使用 gettimeofday 配合 filemtime 获取文件修改时间差

gitbox 2025-05-26

一、基本概念


  • 返回文件的最后修改时间,格式是 Unix 时间戳(秒级别)。

  • gettimeofday($return_float = false)
    返回当前时间信息。如果 $return_float 设为 true,会返回一个浮点数,包含秒和微秒,精度比 time() 更高。


二、实现思路

  1. 使用 filemtime 获取文件最后修改时间(秒级)。

  2. 使用 gettimeofday(true) 获取当前时间(浮点秒数,包含微秒)。

  3. 计算两者的差值,得到文件修改时间与当前时间之间的秒数差。

  4. 可以将差值转化为更易读的格式,比如秒、分钟、小时,甚至更详细。


三、示例代码

<?php
// 假设文件路径
$file = '/path/to/your/file.txt';

// 获取文件最后修改时间(秒)
$file_mtime = filemtime($file);

// 获取当前时间(包含微秒的浮点数秒)
$current_time = gettimeofday(true);

// 计算时间差,单位为秒(浮点数)
$time_diff = $current_time - $file_mtime;

// 输出时间差,保留3位小数
echo "文件最后修改时间距现在约为 " . number_format($time_diff, 3) . " 秒。";

// 如果想显示为更易懂的格式,可以进行转换
$minutes = floor($time_diff / 60);
$seconds = $time_diff % 60;

echo "\n大约是 {$minutes} 分 {$seconds} 秒前修改的。";
?>

四、注意事项

  • filemtime 返回的是文件的 Unix 时间戳,不包含微秒部分,因此时间精度到秒。

  • gettimeofday(true) 返回的是带微秒的当前时间,精度更高。

  • 由于文件修改时间只有秒级别精度,实际计算时间差时,微秒部分不会影响文件修改时间,但可用来提升当前时间的精度。

  • 适合用于监控文件是否最近被修改或检测文件的更新时长。


五、扩展示例:动态监测文件是否超过设定时间没修改

<?php
$file = '/path/to/your/file.txt';
$max_interval = 3600; // 1小时,单位秒

$file_mtime = filemtime($file);
$current_time = gettimeofday(true);
$time_diff = $current_time - $file_mtime;

if ($time_diff > $max_interval) {
    echo "文件已经超过 1 小时没有被修改。";
} else {
    echo "文件在最近 1 小时内有修改。";
}
?>

六、总结

结合 gettimeofday(true)filemtime 函数可以轻松实现文件修改时间和当前时间的精确时间差计算。filemtime 提供文件最后修改时间,gettimeofday 提供高精度当前时间,二者结合实现了简单而实用的文件时间监测功能。


域名替换示例

<?php
$url = 'https://gitbox.net/path/to/resource';
echo "访问的URL是:" . $url;
?>