我有一个可以在文件夹中搜索pdf文件的表单。我想修改我的方法,其中将有来自和的日期范围的用户输入。然后根据日期范围显示pdf文件,如果不存在则只显示“Nothing Found”
我不是真正的PHP专家,我只是谷歌想出我当前的代码。
$dir = './';
$exclude = array('.','..','.htaccess');
$q = (isset($_GET['q']))? strtolower($_GET['q']) : '';
//$date_from = date_create_from_format('Y-m-d',$_GET['dfr']);
//$date_to = date_create_from_format('Y-m-d',$_GET['dto']);
$res = opendir($dir);
echo '<pre>';
echo '<span style="font-weight:bold;font-size:1.5em;line-height: 40px;">Invoice Number</span> <span style="margin-left: 80px;font-size: 1.5em;font-weight: bold;">Date</span> <span style="margin-left: 105px;font-size: 1.5em;font-weight: bold;">Click to View</span> <span style="margin-left: 60px;font-size: 1.5em;font-weight: bold;">Download PDF</span><br>';
while(false !== ($file = readdir($res))) {
if(strpos(strtolower($file),$q)!== false && !in_array($file,$exclude)) {
$fileDate = date("Y-m-d", filectime($file));
echo "<span style='line-height:20px;font-size:15px;'>$file</span> <span style='margin-left:30px;font-size:15px;'>$fileDate</span> <span style='margin-left:90px;font-size:15px;'><a href='$dir$file'>View</a> </span> <span style='margin-left:130px;font-size:15px;'><a href='pdf_server.php?file=$file'>Download</a> </span> ";
echo "<br>";
}
}
echo '</pre>';
closedir($res);
这是我的main.html
中的表单代码<form id="tfnewsearch" method="get" action="search.php">
<label>Search for Invoice: </label><input type="text" id="tfq2b" class="tftextinput2" name="q" size="25" maxlength="120" value="JobNumber-InvoiceNumber"><input type="submit" value=">" class="tfbutton2">
</form>
<form id="tfnewsearch" method="get" action="search.php">
<!-- DATE -->
<label>Date From: </label><input type="date" id="tfq3b" class="tftextinput3" name="dfr" size="14" maxlength="120" value="Date From">
<label> and Date to: </label>
<input type="date" id="tfq4b" class="tftextinput4" name="dto" size="14" maxlength="120" value="Date To"><input type="submit" value=">" class="tfbutton4">
</form>
答案 0 :(得分:0)
按照以下代码
<强> 1。创建一个函数来检查图像日期是否在from_date和to_date
的范围内 function isDateInRange($startDate, $endDate, $userDate)
{
$startT = strtotime($startDate);
$endT = strtotime($endDate);
$userT = strtotime($userDate);
return (($userT >= $startT) && ($userT <= $endT));
}
<强> 2。使功能得到正确的图像Mtime
function GetCorrectMTime($filePath) {
$time = filemtime($filePath);
$isDST = (date('I', $time) == 1);
$systemDST = (date('I') == 1);
$adjustment = 0;
if ($isDST == false && $systemDST == true)
$adjustment = 3600;
else if ($isDST == true && $systemDST == false)
$adjustment = -3600;
else
$adjustment = 0;
return ($time + $adjustment);
}
3.现在获取from_date和to_date之间文件列表的逻辑
$date_from = '2017-01-01';
$date_to = '2017-01-04';
$log_directory = 'your directory path';
$filedata = array();
if (is_dir($log_directory)) {
if ($handle = opendir($log_directory)) {
//Notice the parentheses I added:
while (($file = readdir($handle)) !== FALSE) {
if ($file != '.' && $file != '..') {
$checkdate = date('Y-m-d',$this->GetCorrectMTime($log_directory . $file));
if(isDateInRange($date_from,$date_to,$checkdate)){
$filedata[] = array('filename' => $file, 'filetime' => $this->GetCorrectMTime($log_directory . $file), 'filepath' => $log_directory . $file);
}
}
}
closedir($handle);
}
}
print_r($filedata); //array containg list of files between from_date and to_date
答案 1 :(得分:0)
此代码应该为您完成任务:
编辑:包括搜索参数q和偏移日期_一天 编辑2:单独搜索日期和字符串
$dir = './';
$exclude = array('.','..','.htaccess');
$q = isset($_GET['q']) ? strtolower($_GET['q']) : '';
$date_from = strtotime($_GET['dfr']);
// + 86400 seconds to include the end-date
$date_to = strtotime($_GET['dto']) + 86400;
// initialize $matches with nothing
$matches = null;
// search for matches between from_date and to_date
if($date_from && $date_to)
$matches = array_filter(scandir($dir),
function($file) use($date_from, $date_to, $q) {
$ctime = filectime($file);
$lcfile = strtolower($file);
// exclude entries that starts with '.'
return $lcfile[0] !== '.' &&
// just show PDF files
substr($lcfile, -4) === '.pdf' &&
// check search with filedate
$ctime >= $date_from &&
$ctime < $date_to;
});
// search for matches in filename
else if($q)
$matches = array_filter(scandir($dir),
function($file) use($q) {
$lcfile = strtolower($file);
// exclude entries that starts with '.'
return $lcfile[0] !== '.' &&
// just show PDF files
substr($lcfile, -4) === '.pdf' &&
// check search with filename
strpos($lcfile, $q) !== false;
});
if(empty($matches)) {
echo "<p><em>Nothing Found</em></p>";
} else {
echo '<table cellpadding="5">
<tr>
<th>Invoice Number</th>
<th>Date</th>
<th>Click to View</th>
<th>Download PDF</th>
</tr>';
foreach($matches as $file) {
$fileDate = date("Y-m-d", filectime($file));
echo "<tr>
<td>$file</td>
<td align=\"center\">$fileDate</td>
<td align=\"center\"><a href='$dir$file'>View</a></td>
<td align=\"center\"><a href='pdf_server.php?file=$file'>Download</a></td>
<tr>";
}
echo '</table>';
}