根据文件名中的日期查找文件



我在一个目录中有100个文本文件。

文件名的格式为abcd_2011_04_20.txt

我只需要阅读今天的文件和过去7天的文件。我该怎么做?编辑1:

我已经有一个函数dirTxt(dirname(,它以数组的形式返回文件名。如何识别当前日期的对应文件??然后获取前7天的文件??

编辑2:

数组返回以下

'graph.txt''graph1.txt''abcd_2011-04-12.txt''abcd_2011-04-13.txt''abcd_2011-04-24.txt''abcd_2011-04-15.txt''abcd_2011-04-16.txt''abcd_2011-04-17.txt''abcd_2011-04-18.txt''abcd_2011-04-19.txt'"abcd_2011-04-20.txt">

示例

$dt = time();   // today... or use $dt = strtotime('2010-04-20'); to set custom start date.
$past_days = 7; // number of past days
$filesindir = dirTxt('your_dir');
for ($i=0; $i<=$past_days; $i++) {
  $filename = 'abcd_' . date('Y_m_d', $dt) . '.txt';
  $files[] = $filename;
  $dt = strtotime('-1 day', $dt);
  } 
$files = array_intersect($filesindir, $files);
print_r($files);

输出(可能是这样,取决于$filesindir数组(

Array
(
    [0] => abcd_2011_04_21.txt
    [1] => abcd_2011_04_20.txt
    [2] => abcd_2011_04_18.txt
    [3] => abcd_2011_04_15.txt
)

我制作了一个helper函数,以防您需要在某个地方再次使用它。如果没有,您可以很容易地将它的代码放在循环体中。

function getFileName($unixTime) {
    return 'abcd_' . date('Y_m_j', $unixTime) . '.txt';
} 
$files = array();
foreach(range(0, 6) as $dayOffset) {
   $files[] = getFileName(strtotime('-' . $dayOffset . ' day'));
}
var_dump($files)

CodePad。

输出

array(7) {
  [0]=>
  string(19) "abcd_2011_04_21.txt"
  [1]=>
  string(19) "abcd_2011_04_20.txt"
  [2]=>
  string(19) "abcd_2011_04_19.txt"
  [3]=>
  string(19) "abcd_2011_04_18.txt"
  [4]=>
  string(19) "abcd_2011_04_17.txt"
  [5]=>
  string(19) "abcd_2011_04_16.txt"
  [6]=>
  string(19) "abcd_2011_04_15.txt"

更新

至于阅读它们,只需循环。。。

foreach($files as $file) {
   if ( ! is_file($file)) {
       continue;
   }
   $contents = file_get_contents($file);
}
$filename = 'abcd_' . date('Y_m_d') . '.txt';
if (!file_exists($filename)) {
    die("File $filename does not exist");
}
$contents = file_get_contents($filename);

使用date('Y_m_d', strtotime('-2 days'))获取其他日期。

分析文件名中的日期,并将其与今天的日期进行比较。

PHP为此提供了字符串操作函数和日期/时间函数。


<?php
function isWithinLastSevenDays($str) {
   $pos = strpos($str, "_");
   if ($pos === FALSE)
      throw new Exception("Invalid filename format");
   $str = str_replace('_', '-', substr($str, $pos+1, strlen($str)-$pos-1-4));
   $d1 = new DateTime($str);
   $d2 = new DateTime();
   $d2->modify('-7 days'); // sub() only since PHP 5.3
   return ($d2 < $d1);
}
$str = "abcd_2011_04_20.txt";
var_dump(isWithinLastSevenDays($str));
$str = "abcd_2011_04_10.txt";
var_dump(isWithinLastSevenDays($str));
/*
Output:
bool(true)
bool(false)
*/
?>

相关内容

  • 没有找到相关文章

最新更新