PHP-对照另一个时间段检查时间段

PHP-对照另一个时间段检查时间段,php,Php,为了简单起见,我有两个数组,第一个是我想睡觉的时间范围。我必须在两个小时内不间断地睡觉,所以在这段时间内床必须是可用的。该功能需要检查我想睡觉时床是否可用 $aSleeping=array( “开始”=>“上午6:00”, “结束”=>“上午10:00” ); $aBedAvail=数组( “开始”=>“上午10:00”, “结束”=>“下午12:00” ); 我已经试过了,它在一个时间范围内有效,但在另一个时间范围内无效,非常感谢对这方面的任何改进 function checkRange($a

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

$aSleeping=array(
“开始”=>“上午6:00”,
“结束”=>“上午10:00”
);

$aBedAvail=数组(
“开始”=>“上午10:00”,
“结束”=>“下午12:00”
);

我已经试过了,它在一个时间范围内有效,但在另一个时间范围内无效,非常感谢对这方面的任何改进

function checkRange($aSleeping,$aBedAvail){

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

}
函数检查范围($aSleeping,$aBedAvail){
如果(
strotime($aSleeping['start'])>=strotime($aBedAvail['start'])和

SttoTime[$asLePSe[结尾] ] P>因为用户可以在11H59PM开始在一天内睡觉并在第二天结束,您必须考虑比较使用日期信息。PHP DATETIME有助于启用其他日期功能,如果您需要使用DATAVARS执行其他动作:


$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));

$aSleeping=数组(
“开始”=>新日期时间('2020-03-10 05:00:00'),
'结束'=>新日期时间('2020-03-10 12:00:00')
);
$aBedAvail=数组(
“开始”=>新日期时间('2020-03-10 05:00:00'),
'结束'=>新日期时间('2020-03-10 12:00:00')
);
函数检查范围($aSleeping,$aBedAvail){

return($aSleeping['start']>=$aBedAvail['start']&&$aSleeping['end']]除非其中一个范围的结束时间早于开始时间(从晚上到早上的范围),否则您的函数看起来可以正常工作。您可以通过检查该条件并将结束时间移到第二天(如果在开始时间之前)来更正此问题

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'];
}
函数检查范围(数组$outer,数组$inner){
//创建日期时间
$outer=数组映射('date\u create',$outer);
$inner=数组映射('date\u create',$inner);
//更正较早的结束时间
$outer['start']>$outer['end']&&$outer['end']->修改(“+24小时”);
$internal['start']>$internal['end']&&$internal['end']->修改(“+24小时”);
//比较范围和返回结果

返回$outer['start']>=$internal['start']&&$outer['end']是否有失败的数据集示例?这是伪代码:
If((Range1.FromDate>Range2.FromDate和Range1.FromDateRange2.FromDate和Range1.ToDate