我正在制作租车预订脚本。用户将在预订时输入两个日期,开始日期和结束日期,我需要检查输入的日期是否在已存储在该特定汽车的数据库中的日期之间, 简而言之,如果从 2015-23-08 到 2015-25-08 预订汽车,并且用户输入了这两个日期之间的日期,则显示错误,否则应下订单。
代码中的问题:即使我输入了不同的值,它也总是显示“介于两者之间”
代码:
include 'connection.php';
if (isset($_GET['id'])) {
// escape variables for security
$fleettype = $_POST['fleettype'];
$fleetname = $_POST['fleetname'];
$fleetclass = $_POST['fleetclass'];
$fleetdescription = $_POST['fleetdescription'];
$fleetprice = $_POST['fleetprice'];
$username = $_POST['username'];
$useremail = $_POST['useremail'];
$userphone = $_POST['userphone'];
$sdate = $_POST['sdate'];
$edate = $_POST['edate'];
$time = $_POST['time'];
$driver = $_POST['driver'];
$useremail = $_POST['useremail'];
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
$products = mysqli_query($con, "SELECT * FROM fleet WHERE id='$id' LIMIT 1 ");
while ($row = mysqli_fetch_assoc($products))
{
$stime = $row["stime"];
$etime = $row["etime"];
}
$entereddate = DateTime::createFromFormat('Y/m/d', $stime);
$contractDateBegin = DateTime::createFromFormat('Y/m/d', $sdate);
$contractDateEnd = DateTime::createFromFormat('Y/m/d', $edate);
if ($entereddate >= $contractDateBegin && $entereddate <= $contractDateEnd)
{
echo "in between";
}
else {
echo "no";
}
}
最佳答案
如果日期有助于变量,则无需将日期用单引号引起来,因此请像这样更改`createFromFormat 语句。
此外,else 必须有一个 echo“no”
,而您刚刚有一个 “no”
$entereddate = DateTime::createFromFormat('Y/m/d', $stime);
$contractDateBegin = DateTime::createFromFormat('Y/m/d', $sdate);
$contractDateEnd = DateTime::createFromFormat('Y/m/d', $edate);
if ($entereddate >= $contractDateBegin &&
$entereddate <= $contractDateEnd)
{
echo "in between";
} else {
echo "no";
}
这样做可能会得到更好的结果,因为我很确定你无法比较这样的 DateTime 对象。
$entereddate = strtotime($stime);
$contractDateBegin = strtotime($sdate);
$contractDateEnd = strtotime($edate);
if ($entereddate >= $contractDateBegin &&
$entereddate <= $contractDateEnd)
{
echo "in between";
} else {
echo "no";
}
关于php - 检查输入的开始和结束日期是否在数据库中已有的开始和结束日期之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31976277/