2017-02-12 50 views
0

我有時限的陣列之間的所有時隙中,例如這些:功能找到2中給出倍

[ 
    start_time => 09:00, 
    end_time => 11:00 
    available => 1 
], 
[ 
    start_time => 11:00, 
    end_time => 12:00 
    available => 0 
], 
[ 
    start_time => 12:00, 
    end_time => 18:00, 
    available => 1 
] 

我需要發現如果時間X和Y之間的用戶是可用的或不是一個函數。我怎麼能做到這一點?

這是我走到這一步:

private function findTimeframe($timeframes, $startTime, $endTime) 
{ 
    if (count($timeframes) == 0) { 
     return false; 
    } 

    if ($timeframes[0]['start_time'] < $startTime && $timeframes[0]['end_time'] < $startTime) { 
     array_shift($timeframes); 
     return $this->findTimeframe($timeframes, $startTime, $endTime); 
    } 

    if ($timeframes[0]['end_time'] < $endTime) { 
     // 
    } 
} 

回答

1

嘗試是這樣的:

private function findTimeframe($timeframes, $startTime, $endTime) 
{ 
    foreach ($timeframes as $timeframe) { 
     if ($timeframe['available']) { 
      continue; // if timeframe is avaiable, skip checking times 
     } 

     if (// $startTime is in the timeframe 
      ($timeframe['start_time'] < $startTime && $startTime < $timeframe['end_time']) // 
      // or $endTime is in the timeframe 
      || ($timeframe['start_time'] < $endTime && $endTime < $timeframe['end_time']) 
     ) { 
      return false; 
     } 
    } 

    return true; // not found any timeframe with available=0 and within $startTime/$endTime range 
} 

BTW:我會用http://php.net/strtotime在你的地方,日期/時間字符串轉換成時間戳。

+0

它很好,謝謝。但是數據庫中的字段是TIME而不是TIMESTAMP。不是具有時間和日期的時間使用時間戳嗎? – user3743266