$files = scandir(__DIR__, SCANDIR_SORT_DESCENDING);
首先,我尝试检查日期是否有排序类型,但遗憾的是我找不到,所以我决定使用filemtime
$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变量中。我知道">"检查不起作用,但我无法找到另一种解决方案。感谢。
答案 0 :(得分:2)
根据PHP Manual:
int filemtime (string $ filename)
返回上次修改文件的时间,或者失败时返回FALSE。该 时间以 Unix时间戳的形式返回,适用于date() 功能
比较整数格式比比较日期更容易和舒适。
$latestFilename = '';
$latestTime = 0;
foreach($files as $filename) {
if ($filename != "..") {
if($filename != ".") {
$currentFileTime = filemtime($filename);
if($currentFileTime > $latestTime) {
$latestFilename = $filename;
$lastestTime = $currentFileTime;
}
}
}
}
另一种选择是创建一个DateTime对象并使用定义的比较方法。
答案 1 :(得分:1)
由于您现在开始使用当前时间 ,因此没有文件应该比现在更新 - 并且您要分配文件的名称以进行进一步比较,而不是实际要检查的时间戳。不要将所有内容都转换为日期,而是保留实际的时间戳。这种方式更适合比较,并将文件名保存在单独的变量中。
$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);