【问题标题】:PHP - Check time period against another time periodPHP - 根据另一个时间段检查时间段
【发布时间】:2020-06-22 19:45:57
【问题描述】:

我们只是说,为了简单起见,我有两个数组,第一个是我想睡觉的时间范围。我必须在整个两个小时内不间断地睡觉,所以在那段时间里床必须有空。该功能需要在我想睡觉时检查床是否可用。

$aSleeping = array( 'start' => '6:00 AM', 'end' => '10:00 AM' );

$aBedAvail = array( 'start' => '10:00 AM', 'end' => '12:00 PM' );

我已经尝试过了,它在一个时间范围内有效,但在另一个时间范围内无效,非常感谢任何有助于改进这一点的帮助。

function checkRange($aSleeping,$aBedAvail){

 if(
  strtotime($aSleeping['start']) >= strtotime($aBedAvail['start']) && 
  strtotime($aSleeping['end']) <= strtotime($aBedAvail['end'])
 ){
  return true;
 }else{
  return false;
 }

}

【问题讨论】:

  • 你有失败的数据集的例子吗?
  • 这是伪代码:If ((Range1.FromDate &gt; Range2.FromDate And Range1.FromDate &lt; Range2.ToDate) And (Range1.ToDate &gt; Range2.FromDate And Range1.ToDate &lt; Range2.ToDate)) Then /* Range 1 falls completley within Range2 */ End If

标签: php


【解决方案1】:

由于用户可以在一天的晚上 11 点 59 分开始睡觉并在第二天结束,因此您必须考虑使用日期信息进行比较。 PHP DateTime 有助于启用其他日期功能,以防您需要使用日期变量执行其他操作:


$aSleeping = array(
  'start' => new DateTime('2020-03-10 05:00:00'),
  'end' =>  new DateTime('2020-03-10 12:00:00')
);

$aBedAvail = array(
  'start' => new DateTime('2020-03-10 05:00:00'),
  'end' =>  new DateTime('2020-03-10 12:00:00')
);

function checkRange($aSleeping,$aBedAvail){
  return ($aSleeping['start'] >= $aBedAvail['start'] && $aSleeping['end'] <= $aBedAvail['end']) ? true : false;
}

var_dump(checkRange($aSleeping,$aBedAvail));

【讨论】:

    【解决方案2】:

    除非任何一个范围的结束时间早于开始时间(从晚上到早上的范围),否则您的函数看起来可以正常工作。您可以通过检查该条件并将结束时间移至第二天(如果它早于开始时间)来纠正此问题。

    function checkRange(array $outer, array $inner) {
    
        // create DateTimes
        $outer = array_map('date_create', $outer);
        $inner = array_map('date_create', $inner);
    
        // Correct earlier end times
        $outer['start'] > $outer['end'] && $outer['end']->modify('+24 hours');
        $inner['start'] > $inner['end'] && $inner['end']->modify('+24 hours');
    
        // compare ranges and return result
        return $outer['start'] >= $inner['start'] && $outer['end'] <= $inner['end'];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多