PHP根据用户输入日期范围

时间:2018-01-04 10:35:06

标签: php sorting date filter user-input

我有一个可以在文件夹中搜索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="&gt;" 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="&gt;" class="tfbutton4">
        </form>         

2 个答案:

答案 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>';
}