代码之家  ›  专栏  ›  技术社区  ›  Florian Zaskoku

如何检查最晚的日期?

  •  4
  • Florian Zaskoku  · 技术社区  · 7 年前
    $files = scandir(__DIR__, SCANDIR_SORT_DESCENDING);
    

    $latest = date("d Y H:i:s.");
    printf($latest);
    foreach($files as $value) {
        if ($value != "..") {
            if($value != ".") {
                $latestnew = date("d Y", filemtime($value));
    
                if($latestnew > $latest) {
                    $latest = $value;
                }
            }
        }
    }
    printf($latest);
    

    你可以看到我有一个数组,里面有很多文件。最新文件名应位于$latest变量中。我知道“>检查不起作用,但我无法找到其他解决方案。谢谢

    2 回复  |  直到 7 年前
        1
  •  2
  •   Ofir Baruch    7 年前

    根据 PHP Manual :

    整数 文件时间 (字符串$filename)

    返回文件上次修改的时间,或失败时返回FALSE。这个 时间作为 Unix时间戳 ,适用于日期() 作用

    比较整数要比比较日期格式简单得多。

    $latestFilename = '';
    $latestTime = 0;    
    foreach($files as $filename) {
            if ($filename != "..") {
                if($filename != ".") {
                    $currentFileTime = filemtime($filename);
    
                    if($currentFileTime > $latestTime) {
                        $latestFilename = $filename;
                        $lastestTime = $currentFileTime;
                    }
                }
            }
        }
    

    另一种选择是创建DateTime对象并使用定义的比较方法。

        2
  •  1
  •   MatsLindh    7 年前

    因为你是从现在开始的 马上 ,没有任何文件应该比现在更新-您正在分配文件名以进行进一步比较,而不是要检查的实际时间戳。保留实际的时间戳,而不是将所有内容转换为日期。这样更适合进行比较,并将文件名保留在单独的变量中。

    $latest = 0;
    $latest_name = null;
    
    foreach($files as $value) {
        if (($value != "..") && ($value != ".")) {
            $latestnew = filemtime($value);
    
            if($latestnew > $latest) {
                $latest = $latestnew;
                $latest_name = $value;
            }
        }
    }
    
    print(date("d Y H:i:s", $latest) . ' - ' . $latest_name);
    

    这将打印最新文件的格式化时间戳及其名称。您可能还需要添加前缀 $value 如果调用时文件不在当前目录中,则返回文件的路径 filemtime . 即。 filemtime($path . '/' . $value);