繁体   English   中英

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

[英]PHP - How can I check if a date lies between two existing dates?

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

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

$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语句

而不是在PHP中进行比较,你可以在你的mysql查询中做到这一点。

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

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

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

$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);

为什么不在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注入问题。

试试这个查询,在您的查询本身我们可以找到预订特定房间的有效性..

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'

你做的一切都是正确的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功能进行比较。 任何疑问都会评论我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM