如何使用具有最小文件日期(filemtime)的 PHP glob()?
How to use PHP glob() with minimum file date (filemtime)?
我想使用 PHP glob 函数获取一系列文件,但不超过一个月(或其他指定的日期范围)。
我当前的代码:
$datetime_min = new DateTime('today - 4 weeks');
$product_files = array();
foreach(glob($image_folder.$category_folder.'*'.$img_extension) as $key => $product) if (filemtime($product)>$datetime_min) { $product_files[] = $product; }
这returns一个错误:
Notice: Object of class DateTime could not be converted to int
我认为它仍然为我提供了该文件夹中所有文件的结果。所以我的方法可能是完全错误的。
我怎样才能让这段代码工作,所以我只有一个包含不早于指定日期的文件的数组?
filemtime()
returns a Unix timestamp 这是一个整数。 DateTime 对象是可比较的,但只能相互比较。您需要将它们转换为 Unix 时间戳或将 filemtime()
的结果转换为 DateTime 对象。
选项 1:
$datetime = (new DateTime('now'))->format('U');
$datetime_min = (new DateTime('today - 4 weeks')->format('U');
选项 2:
$filetime = new DateTime(@filemtime($product));
if (filetime > $datetime_min) {}
试试这个脚本
<?php
$to = date("Y-m-d H:i:s");
$from = date('Y-m-d H:i:s', strtotime("-100 days"));
getAllFilesInDirectoryWithDateRange("*.*", $sdf, $today);
function getAllFilesInDirectoryWithDateRange($filePattern, $from, $to) {
foreach (glob($filePattern) as $filename) {
if (date("Y-m-d H:i:s", filemtime($filename)) >= $from &&
date("Y-m-d H:i:s", filemtime($filename)) <= $to) {
echo "$filename" . "\n";
}
}
}
输出
test1.txt
test2.txt
test3.txt
test4.txt
test5.txt
您可以使用 getAllFilesInDirectoryWithDateRange
函数并获取目录中的所有文件名
在这个函数中,我使用 filemtime
来获取时间,然后像这样检查阈值
date("Y-m-d H:i:s", filemtime($filename)) >= $from &&
date("Y-m-d H:i:s", filemtime($filename)) <= $to
你可以用 array_filter() 解决这个问题。
$tsLimit = strtotime('-2 Month');
$file_pattern = ..//your file pattern
$files = array_filter(
glob($file_pattern),
function($val) use($tsLimit){
return filemtime($val) > $tsLimit;
}
);
我想使用 PHP glob 函数获取一系列文件,但不超过一个月(或其他指定的日期范围)。
我当前的代码:
$datetime_min = new DateTime('today - 4 weeks');
$product_files = array();
foreach(glob($image_folder.$category_folder.'*'.$img_extension) as $key => $product) if (filemtime($product)>$datetime_min) { $product_files[] = $product; }
这returns一个错误:
Notice: Object of class DateTime could not be converted to int
我认为它仍然为我提供了该文件夹中所有文件的结果。所以我的方法可能是完全错误的。
我怎样才能让这段代码工作,所以我只有一个包含不早于指定日期的文件的数组?
filemtime()
returns a Unix timestamp 这是一个整数。 DateTime 对象是可比较的,但只能相互比较。您需要将它们转换为 Unix 时间戳或将 filemtime()
的结果转换为 DateTime 对象。
选项 1:
$datetime = (new DateTime('now'))->format('U');
$datetime_min = (new DateTime('today - 4 weeks')->format('U');
选项 2:
$filetime = new DateTime(@filemtime($product));
if (filetime > $datetime_min) {}
试试这个脚本
<?php
$to = date("Y-m-d H:i:s");
$from = date('Y-m-d H:i:s', strtotime("-100 days"));
getAllFilesInDirectoryWithDateRange("*.*", $sdf, $today);
function getAllFilesInDirectoryWithDateRange($filePattern, $from, $to) {
foreach (glob($filePattern) as $filename) {
if (date("Y-m-d H:i:s", filemtime($filename)) >= $from &&
date("Y-m-d H:i:s", filemtime($filename)) <= $to) {
echo "$filename" . "\n";
}
}
}
输出
test1.txt
test2.txt
test3.txt
test4.txt
test5.txt
您可以使用 getAllFilesInDirectoryWithDateRange
函数并获取目录中的所有文件名
在这个函数中,我使用 filemtime
来获取时间,然后像这样检查阈值
date("Y-m-d H:i:s", filemtime($filename)) >= $from &&
date("Y-m-d H:i:s", filemtime($filename)) <= $to
你可以用 array_filter() 解决这个问题。
$tsLimit = strtotime('-2 Month');
$file_pattern = ..//your file pattern
$files = array_filter(
glob($file_pattern),
function($val) use($tsLimit){
return filemtime($val) > $tsLimit;
}
);