php函数没有返回正确的文件日期

时间:2012-09-08 17:48:35

标签: php

不知道为什么,但我无法获得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 . ')';

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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)),

应该工作。