使用php查找两个日期之间修改的文件

时间:2014-06-06 14:45:26

标签: php date datetime filemtime

我对php中的各种日期函数和格式感到非常困惑,所以我想尽可能寻求帮助。 我正在尝试查找两个日期之间修改过的文件,但语法让我感到困惑。例如,如果我试图找到6个月到1年前改变的文件,我试过:

$yearago = new DateTime("now");
date_sub($yearago, date_interval_create_from_date_string("1 year"));

$sixmonthsago = new DateTime("now");
date_sub($sixmonthsago, date_interval_create_from_date_string("6 months"));

$dir    = '/datacore/';
$files1 = scandir($dir);

foreach($files1 as $key => $value)
{

    $datemod = filemtime($value);

    if ($datemod>$yearago && $datemod<$sixmonthsago) // eg between 6 and 12 months ago
    {
    // Do stuff
    }

}

我知道这是低效的;在目录中找到一个文件名数组,然后在filemtime上循环遍历这个数组,但这是未来的工作,但是日期和日期时间的混合让我感到困惑。

3 个答案:

答案 0 :(得分:0)

您没有将date_sub值分配回变量,因此“减去”值就会丢失。你应该有:

$yearago = date_sub($yearago,  ...);

另外,您可以简单地告诉DateTime生成适当的日期:

$yearago = new DateTime("1 year ago");
$sixmonths = new DateTime('6 months ago');

请注意$yearago$sixmonths是DateTime对象,而filemtime()返回标准Unix时间戳,您无法直接比较它们。

所以你可能只有

$yearago = strtotime('1 year ago');
$sixmonths = strtotime('6 months ago');

为您提供开始时间戳,无需进一步转换

答案 1 :(得分:0)

您可以使用strtotime函数从人类时间表示生成时间戳(例如1 year ago)。

现在您可以像这样使用它:

<?php

// Load Timestamps
$sixMonthsAgo = strtotime("6 months ago");
$oneYearAgo = strtotime("1 year ago");

// Load Files & Check Timestamps
// Note* you can filter by ext, e.g: /datacore/*.pdf
$myFiles = glob("/datacore/*");

// Now Check & Build List
$checkedFiles = array();
foreach ($myFiles as $myFile) {
    $fileModifiedTime = filemtime($myFile);
    if ($fileModifiedTime >= $oneYearAgo && $fileModifiedTime <= $sixMonthsAgo)
        $checkedFiles[] = $myFile;
}

// Debug
echo "Found ". sizeof($checkedFiles) ." files that were updated from ". 
     date('d-m-Y H:i:s a', $sixMonthsAgo) ." to ". 
     date('d-m-Y H:i:s a', $oneYearAgo);

echo "<pre>";
print_r($checkedFiles);
echo "</pre>";

答案 2 :(得分:-1)

GitHub上有一个名为ZFYL zipper

的项目

如果您在服务器上部署它,请将目录更改为zip ,然后将模式更改为仅显示可压缩文件列表

该计划的图片:

ZFYL zipper mainpage

另外,如果需要,可以将zipper.php包含到任何php文件中并调用内置函数。

GitHub wiki页面(github.com/ZFYL/zipper/wiki/Functions)中描述了如何使用此库。