如何比较 PHP 上的六次?
How To Compare six time on PHP?
我在 PHP 上比较 3 时间有问题。
所以用户只是输入了一个时间now()。但它必须与从数据库加载的 3 个不同时间进行比较。
这样的代码
if(isset($_POST[SUBMIT])) {
$waktu = strtotime($_POST[WAKTU]); //$waktu variabel input set hh:mm
/*Get Time Setting From mysql*/
$sql4 = "SELECT * FROM promo_time";
$hasil4 = mysqli_query($sql4);
$data4 = mysqli_fetch_assoc($hasil4);
$jam1_A = strtotime($data4[WAKTU_PROMO1_A]);
$jam1_B = strtotime($data4[WAKTU_PROMO1_B]);
$jam2_A = strtotime($data4[WAKTU_PROMO2_A]);
$jam2_B = strtotime($data4[WAKTU_PROMO2_B]);
$jam3_A = strtotime($data4[WAKTU_PROMO3_A]);
$jam3_B = strtotime($data4[WAKTU_PROMO3_B]);
if(($waktu >= $jam3_A) || ($waktu <= $jam3_B)){
if(($waktu >= $jam2_A) || ($waktu <= $jam2_B)) {
if(($waktu >= $jam1_A) || ($waktu <= $jam1_B)) {
echo "Success";
}
else {
echo "erro 3";
}
}
else {
echo "Error 2";
}
}//endif
else {
echo "Error 1";
}
}
如果我使用 OR 运算符,代码结果总是显示 "Succes"。
但是如果我使用 AND 运算符,代码结果总是错误 1。
预览像这样
如果我输入16:00结果是成功,但如果我输入19:00它仍然成功。
谁能帮我解决这个问题?
提前致谢
感谢vp_arth。这应该是正确的逻辑
$jam1_bool = $waktu > $jam1_A && $waktu < $jam1_B;
$jam2_bool = $waktu > $jam2_A && $waktu < $jam2_B;
$jam3_bool = $waktu > $jam3_A && $waktu < $jam3_B;
if (!$jam1_bool)
echo "Error 1";
if (!$jam2_bool)
echo "Error 2";
if (!$jam3_bool)
echo "Error 3";
if($jam1_bool && $jam2_bool && $jam3_bool)
echo "Success";
你的逻辑是错误的。例如,如果当前时间是 16:00
(16:00>=01:00) || (16:00<=04:14) is true, because (16:00>=01:00) is true
(16:00>=07:12) || (16:00<=10:12) is true, because (16:00>=07:12) is true
(16:00>=15:10) || (16:00<=18:11) is true, because (16:00>=15:10) is true
在这种情况下,您将得到 "success"。至于19:00
(19:00>=01:00) || (19:00<=04:14) is true, because (19:00>=01:00) is true
(19:00>=07:12) || (19:00<=10:12) is true, because (19:00>=07:12) is true
(19:00>=15:10) || (19:00<=18:11) is true, because (19:00>=15:10) is true
结果应该是"success"。
我想你想要完成的是:
$boo1 = (($waktu >= $jam1_A) || ($waktu <= $jam1_B));
$boo2 = (($waktu >= $jam2_A) || ($waktu <= $jam2_B));
$boo3 = (($waktu >= $jam3_A) || ($waktu <= $jam3_B));
$boo12= (($boo1)&&($boo2));
$boo23= ($boo2)&&($boo3));
$boo13= (($boo1)&&($boo3));
$booAll = ($boo1)&&($boo2)&&(boo3);
if(booALL)
echo "success"
else if (($boo23==true)&&($boo1==false))
echo "error 1";
else if (($boo13==true)&&($boo2==false))
echo "error 2";
else if (($boo12==true)&&($boo3==false))
echo "error 3";
else
echo "other errors"
其他错误如$boo1=true, $boo2=false, $boo3=false。也就是说当前时间要么不在jam2A~jam2B中,要么不在jam 3A~jam3B中,你也应该把这个错误当成错误4,总共应该有7种错误(包括全错错误)。
a >= 1 || a <= 2
对所有数字a都成立。使用 &&
像这样:
$in1 = $waktu >= $jam1_A && $waktu <= $jam1_B;
$in2 = $waktu >= $jam2_A && $waktu <= $jam2_B;
$in3 = $waktu >= $jam3_A && $waktu <= $jam3_B;
$result = ($in1 || $in2 || $in3) ? 'Success' : 'Error';
echo $result;
我在 PHP 上比较 3 时间有问题。
所以用户只是输入了一个时间now()。但它必须与从数据库加载的 3 个不同时间进行比较。
这样的代码
if(isset($_POST[SUBMIT])) {
$waktu = strtotime($_POST[WAKTU]); //$waktu variabel input set hh:mm
/*Get Time Setting From mysql*/
$sql4 = "SELECT * FROM promo_time";
$hasil4 = mysqli_query($sql4);
$data4 = mysqli_fetch_assoc($hasil4);
$jam1_A = strtotime($data4[WAKTU_PROMO1_A]);
$jam1_B = strtotime($data4[WAKTU_PROMO1_B]);
$jam2_A = strtotime($data4[WAKTU_PROMO2_A]);
$jam2_B = strtotime($data4[WAKTU_PROMO2_B]);
$jam3_A = strtotime($data4[WAKTU_PROMO3_A]);
$jam3_B = strtotime($data4[WAKTU_PROMO3_B]);
if(($waktu >= $jam3_A) || ($waktu <= $jam3_B)){
if(($waktu >= $jam2_A) || ($waktu <= $jam2_B)) {
if(($waktu >= $jam1_A) || ($waktu <= $jam1_B)) {
echo "Success";
}
else {
echo "erro 3";
}
}
else {
echo "Error 2";
}
}//endif
else {
echo "Error 1";
}
}
如果我使用 OR 运算符,代码结果总是显示 "Succes"。 但是如果我使用 AND 运算符,代码结果总是错误 1。
预览像这样
如果我输入16:00结果是成功,但如果我输入19:00它仍然成功。
谁能帮我解决这个问题?
提前致谢
感谢vp_arth。这应该是正确的逻辑
$jam1_bool = $waktu > $jam1_A && $waktu < $jam1_B;
$jam2_bool = $waktu > $jam2_A && $waktu < $jam2_B;
$jam3_bool = $waktu > $jam3_A && $waktu < $jam3_B;
if (!$jam1_bool)
echo "Error 1";
if (!$jam2_bool)
echo "Error 2";
if (!$jam3_bool)
echo "Error 3";
if($jam1_bool && $jam2_bool && $jam3_bool)
echo "Success";
你的逻辑是错误的。例如,如果当前时间是 16:00
(16:00>=01:00) || (16:00<=04:14) is true, because (16:00>=01:00) is true
(16:00>=07:12) || (16:00<=10:12) is true, because (16:00>=07:12) is true
(16:00>=15:10) || (16:00<=18:11) is true, because (16:00>=15:10) is true
在这种情况下,您将得到 "success"。至于19:00
(19:00>=01:00) || (19:00<=04:14) is true, because (19:00>=01:00) is true
(19:00>=07:12) || (19:00<=10:12) is true, because (19:00>=07:12) is true
(19:00>=15:10) || (19:00<=18:11) is true, because (19:00>=15:10) is true
结果应该是"success"。
我想你想要完成的是:
$boo1 = (($waktu >= $jam1_A) || ($waktu <= $jam1_B));
$boo2 = (($waktu >= $jam2_A) || ($waktu <= $jam2_B));
$boo3 = (($waktu >= $jam3_A) || ($waktu <= $jam3_B));
$boo12= (($boo1)&&($boo2));
$boo23= ($boo2)&&($boo3));
$boo13= (($boo1)&&($boo3));
$booAll = ($boo1)&&($boo2)&&(boo3);
if(booALL)
echo "success"
else if (($boo23==true)&&($boo1==false))
echo "error 1";
else if (($boo13==true)&&($boo2==false))
echo "error 2";
else if (($boo12==true)&&($boo3==false))
echo "error 3";
else
echo "other errors"
其他错误如$boo1=true, $boo2=false, $boo3=false。也就是说当前时间要么不在jam2A~jam2B中,要么不在jam 3A~jam3B中,你也应该把这个错误当成错误4,总共应该有7种错误(包括全错错误)。
a >= 1 || a <= 2
对所有数字a都成立。使用 &&
像这样:
$in1 = $waktu >= $jam1_A && $waktu <= $jam1_B;
$in2 = $waktu >= $jam2_A && $waktu <= $jam2_B;
$in3 = $waktu >= $jam3_A && $waktu <= $jam3_B;
$result = ($in1 || $in2 || $in3) ? 'Success' : 'Error';
echo $result;