日期/时间变量不尊重if语句

时间:2013-08-13 15:09:50

标签: php date

我正在运行一个程序,其中部分程序遍历目录并将最新日期存储在变量中,将最新文件夹的名称存储在另一个目录中。我设置了一系列警报,以便我可以调试。

提醒订单:

  • 表示当前子目录和时间
  • 然后,子目录日期的变量被称为“temp”和最新日期。
  • 然后“更新时间”,如果temp更新,那么“最新”
  • 如果临时更新,那么“时间已经改变”,那么“最新”
  • 然后它表示与该日期相关联的新的最新时间和最新文件夹名称

我的问题是通过第一个子目录,这一切都表现正常。然后第二个目录搞砸了。预计会有前2个警报(顺便说一下,第二个目录比第一个目录早)。跳过第三个和第四个警报(如预期的那样)。但第5个警报显示最新的文件夹变量已更改为当前子目录(但最新时间仍为过去的迭代子目录时间)。

希望这是有道理的......这是代码

<?php  
    $files = array();
    $latestTime = date("1900-01-01"); ///older then any of the folders will be
    $latestFolder = "none";
    foreach (new DirectoryIterator('./images/ISGC_images/') as $fileInfo) { ///iterate through directory
        if($fileInfo =="."|$fileInfo == "..") continue;
        if($fileInfo->isDir()) { 
                echo "<script type='text/javascript'>alert('".$fileInfo." was updated ".date("F d Y H:i:s.",filemtime('./images/ISGC_images/'.$fileInfo))."');</script>";
                $tempDate = date("F d Y H:i:s.",filemtime('./images/ISGC_images/'.$fileInfo));
                echo "<script type='text/javascript'>alert('"."temp time is ".$tempDate.'and latest time is'.$latestTime."');</script>";
                if ($tempDate > $latestTime)
                    echo "<script type='text/javascript'>alert('"."update time"."');</script>"; 
                if ($tempDate > $latestTime) { 
                    $latestFolder = $fileInfo;
                    $latestTime = $tempDate;
                    echo "<script type='text/javascript'>alert('"."Time Changed!"."');</script>"; 
                }
                echo "<script type='text/javascript'>alert('"."latest folder is ".$latestFolder."');</script>"; 
                echo "<script type='text/javascript'>alert('"."latest time is ".$latestTime."');</script>"; 
            }                    
        }              

?>

ANSWER

第14行需要更改为$ latestFolder =(string)$ fileInfo;因为文件夹对象显然不能存储在变量中

1 个答案:

答案 0 :(得分:1)

你直接比较你的日期,而它们仍然是字符串。这似乎是默认为字母字符串比较,所以你说的是“01-01-1980”&gt; “01-01-1900”,可能不适用于下一个字符串比较,就像“apple”&gt; “梨”。

尝试使用实际的时间比较。 e.g:

 if (strtotime($tempDate) > strtotime($latestTime)

此部分似乎没有意义:

if($fileInfo->isDir()) { 
    (...)
    if (file_exists('./images/ISGC_images/'.$fileInfo));

所以,即使它是一个目录,你也可以使用file_exists('folder'。)?当然这不是文件。要遍历子目录中的文件,您必须执行与您在顶部执行的操作类似的操作。

尝试使用这些提示自行解决。