2017-02-12 1 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) 
{ 
    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 
} 

ところで:私は、タイムスタンプに日付/時刻文字列を変換するために、あなたの場所にhttp://php.net/strtotimeを使用することになり

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

はこのような何かを試してみてください。

+0

いいです、ありがとうございます。しかし、フィールドはデータベース内のTIMESTAMPではないTIMEです。時刻と日付の両方を持つ時刻にはタイムスタンプは使用されていませんか? – user3743266

関連する問題