PHP - 如何检查日期是否在两个现有日期之间?

时间:2016-06-01 04:31:35

标签: php mysql

我正在尝试制作一个预订页面,其中包含来自用户的登记入住和退房日期以及房间号码。

这是我目前的代码;其当前功能是获取所选房间号的所有预订并检查其所有日期范围,以查看当前预订中的一个与用户输入日期重叠。如果它重叠然后回显错误否则什么也不做。 :

$sql18 = "SELECT rid, checkin, checkout FROM bookings
    WHERE rid = $rNumber";    //$rNumber is room number obtained from a dropdown list
$results18 = mysqli_query($conn, $sql18);

while ($row = mysqli_fetch_array($results18)) {
    if (('$cInDate' >= $row["checkin"] && '$cInDate' < $row["checkout"]) ||  //$cInDate and $cOutDate are user inputs
        ('$cOutDate' > $row["checkin"] && '$cOutDate' <= $row["checkout"])) {
        echo "invalid booking";
    }
}

我测试了if语句以便在没有运气的情况下触发错误。我仍然越过if语句没有错误

5 个答案:

答案 0 :(得分:0)

您可以在mysql查询中执行此操作,而不是在php中进行比较。

$sql18 = "SELECT rid, checkin, checkout 
FROM bookings
WHERE rid = $rNumber 
AND checkin <= '{$row['checkout']}' 
AND checkout => '{$row['checkin']}'";

当您在两个日期与两个日期进行比较时,您可以使用交叉比较,将checkin列与checkout日期进行比较,将checkout列与checkin日期进行比较,如上面的查询所示。

答案 1 :(得分:0)

请尝试执行以下查询。我希望它会给你正确的记录。 请检查并告知我们。

$sql18 = "SELECT rid,checkin,checkout 
FROM bookings WHERE 
rid = $rNumber 
AND checkin <='".$cInDate."' 
AND checkout >='".$cInDate."' 
AND checkin  <='".$cOutDate."' 
AND checkout >'".$cOutDate."'";    //$rNumber is

$results18 = mysqli_query($conn, $sql18);

答案 2 :(得分:0)

为什么不在SQL查询中的函数之间使用?

您的SQL查询应如下所示

$sql18 = "SELECT 
rid, checkin, checkout 
FROM bookings
WHERE rid = $rNumber AND
(checkin BETWEEN $cInDate AND $cOutDate) AND
(checkout BETWEEN $cInDate AND $cOutDate)";

如果有特定时间的预订,这将返回。

避免在SQL查询中使用普通的PHP变量,这会导致SQL注入问题。

答案 3 :(得分:0)

尝试此查询,在您的查询中我们可以找到预订特定房间的有效性。

SELECT A.*,(CASE WHEN A.checkin >= '$cInDate' && A.checkin <= '$cOutDate'
&& A.checkout >= '$cInDate' && A.checkout <= '$cOutDate' THEN 'Valid' ELSE 'Invalid' END) 
AS Roomstatus FROM booking A WHERE A.rid='$rNumber'

答案 4 :(得分:0)

你做的一切都是正确的nanjero。只有在条件中你使用单引号中的变量才能使它被认为是字符串所以只有它不起作用。它已经检查了一些静态数据,它正在工作。请仔细阅读以下代码。

$cInDate = '2016-11-03';
$cOutDate = '2016-11-08';
$rNumber = 'G01';

$sql18 = "SELECT rid, checkin, checkout FROM bookings
    WHERE rid = '$rNumber'";    //$rNumber is room number obtained from a dropdown list
$results18 = mysqli_query($con, $sql18);

while ($row = mysqli_fetch_array($results18)) {
    if (($cInDate >= $row["checkin"] && $cInDate <= $row["checkout"]) ||  //$cInDate and $cOutDate are user inputs
        ($cOutDate > $row["checkin"] && $cOutDate <= $row["checkout"])) {
        echo "invalid booking";
    }
}

即使它正在运作。更好的是你可以使用strtotime功能进行比较。有任何疑问都会评论我。