0

不知道为什么,但我无法获得一个 PHP 函数来显示某个文件的提交时间。前任; 大约 1 年前或大约 2 秒前。但是,在我的情况下,即使文件已在几秒钟前提交,它仍停留在“大约 1 天前”。

这是自提交以来应该得到时间的函数

function time_since($since) {
    $chunks = array(
        array(60 * 60 * 24 * 365 , 'year'),
        array(60 * 60 * 24 * 30 , 'month'),
        array(60 * 60 * 24 * 7, 'week'),
        array(60 * 60 * 24 , 'day'),
        array(60 * 60 , 'hour'),
        array(60 , 'minute'),
        array(1 , 'second')
    );

    for ($i = 0, $j = count($chunks); $i < $j; $i++) {
        $seconds = $chunks[$i][0];
        $name = $chunks[$i][1];
        if (($count = floor($since / $seconds)) != 0) {
            break;
        }
    }

    $print = ($count == 1) ? '1 '.$name : "$count {$name}s";
    return $print;
}

这是使用上述函数并将所有信息注入 JSON 的代码

$dh = opendir($dir);
$files = array();
while (($file = readdir($dh)) !== false) {
    if ($file != '.' AND $file != '..' ) {
        if (filetype($dir . $file) == 'file') {
            $files[] = array(
                'id' => $domain.$dir.$file."?".Salt($file),
                'name' => $file,
                'size' => filesize($dir . $file). ' bytes',
                'date' => time_since(date("ymd Hi", filemtime($dir . $file))),
                'path' => $domain.$dir.$file,
                'thumb' => $domain.$dir."thumbnails/".$file
                #'thumb' => $dir . 'thumbs/' . $file
            );
        }            
    }
}
closedir($dh);

    $json = json_encode($files);

    $callback = $_GET['callback'];
    echo $callback.'('. $json . ')';
4

2 回答 2

3

您是否尝试过为您的函数传递时间戳而不是字符串:

'date' => time_since(time() - filemtime($dir . $file)),
于 2012-09-08T17:55:19.747 回答
1

在进行计算之前,您应该将日期转换为 unix 时间戳。

            'date' => time_since(date("ymd Hi", filemtime($dir . $file))),

应该 :

            'date' => time_since(strtotime(date("Y-m-d H:i:00", filemtime($dir . $file)))),

更新:

@Arthur Halma 刚刚给出了正确答案:filemtime 返回时间戳!

            'date' => time_since(time() - filemtime($dir . $file)),

应该管用。

于 2012-09-08T17:55:40.370 回答