在PHP我需要一行如果条件的时间比较

diE*_*cho -3 php

我必须珍惜

 $mo=strtotime($input_array['MondayOpen']);
 $mc=strtotime($input_array['MondayClose']);
Run Code Online (Sandbox Code Playgroud)

现在我需要一个if条件在以下条件下显示错误

  1. 如果其中一个($ mo或$ mc)为空,null或空白.
  2. 如果收盘时间($ mc)小于开盘时间($ mo)

意味着如果两者都为空(null)或$ mc> $ mo则更进一步

如果有条件,请建议优化一行

我知道这似乎是一个非常基本的问题,但即使面临问题,当两者都为空时,我使用简单

if(($mo==NULL && $mc!=NULL) || ( $mo>=$mc && ($mo!=NULL && $mc!=NULL))  )
Run Code Online (Sandbox Code Playgroud)

Bri*_*acy 6

请记住,0,null和空白都意味着完全不同的东西.如前所述,strtotime永远不会返回NULL.但是,0是有效的unix时间戳,而false表示strtotime函数无法处理提供的值.

此外,您已经要求提供单线解决方案; 但是,在我看来,在这种情况下写出每个条件并为每个条件显示不同的错误消息要好得多.这样,用户就知道实际出了什么问题.也许这是一个更好的方法:

// Only check for errors if we have at least one value set
if (!empty($input['MondayOpen']) || !empty($input['MondayClosed']) {
    $mo = strtotime($input['MondayOpen']);
    $mc = strtotime($input['MondayClosed']);

    $invalid = false;
    if (false === $mo) {
        echo "Invalid Opening Time\n";
        $invalid = true;
    }

    if (false === $mc) {
        echo "Invalid Closing Time\n";
        $invalid = true;
    }

    if (!$invalid && $mc <= $mo) {
        echo "Closing time must be After Opening Time\n";
        $invalid = true;
    }

    if ($invalid) {
        exit();  // Or handle errors more gracefully
    }
}

// Do something useful
Run Code Online (Sandbox Code Playgroud)