PHP循环遍历数组并检查日期

时间:2015-01-15 15:08:19

标签: php json date loops

我的应用中有一个表单。此表单由2个文本字段组成=' date'。现在,当给出两个日期时,日期将发送到PHP脚本,该脚本使用strtotime转换日期。

PHP脚本与mySQL数据库建立连接,该数据库返回带有请求的结果。我想循环遍历所有请求,并检查请求的日期是否在表格发送的两个日期之间。

现在发生了什么:

$sql = "SELECT * FROM Requests";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

if($result) {

foreach ($result as $row){
    $return[]=array('employeeid'=>$row['employeeid']
                    'id'=>$row['id'],
                    'startdate'=>$row['startdate'],
                    'enddate'=>$row['enddate'],
                    'type'=>$row['type'],
                    'reason'=>$row['reason']);
}

header('Content-type: application/json');
echo '' . json_encode($return) .'';
return true;

} else {
    return false;
}

上面的代码生成了一个包含请求的完美json文件。但正如我所提到的,我想检查上述请求的开始日期是否在表单发送的两个日期之间。

这样的事情:

if (($request_startdate >= $startdate) && ($request_startdate <= $enddate)) {
  //generate array with the requests
} else {
  //no requests between dates. 
}

但是如何遍历请求并检查startdate?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您正在采取艰难的方式,在您的选择查询中添加where语句会更容易:

我假设您的表单有两个名为date1,date2

的字段
$sql = "SELECT * FROM Requests where startdate>:date1 and enddate<:date2";
    $stmt = $conn->prepare($sql);
    $stmt->bindValue(':date1',$_POST['date1'],PDO::PARAM_STR);
    $stmt->bindValue(':date2',$_POST['date2'],PDO::PARAM_STR);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

答案 1 :(得分:0)

将您的字符串输入转换为DateTime并将其格式化为ISO date format(或者至少确保它们采用mySQL接受的格式)

$sdt = DateTime::createFromFormat('format of your input', $request_startdate);
$edt = DateTime::createFromFormat('format of your input', $request_enddate);

修改您的sql以仅查询您要使用的行:

SELECT * FROM Requests 
WHERE startdate <= :sdt AND :edt >= :edt

然后绑定您的参数(see php doc):

$stmt->bindParam(':sdt', $sdt->format('YYYY-mm-dd 00:00:00'), PDO::PARAM_STR);
$stmt->bindParam(':edt', $edt->format('YYYY-mm-dd 23:59:59'), PDO::PARAM_STR);