如何比较 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;