純粋にMySQLクエリから空き時間ブロックを取得しようとしましたが、持っているデータを扱うクエリを構築できませんでした。私は単純にクエリからstart
とend
の日付を取得し、PHPの空き時間ブロックを解消することを選択しました。しかしこれもまた困難であることが証明されている。開始日と終了日のPHP空き時間ブロック
私は、次の配列(ただの例では、曜日と時間が異なります)している:私はで終わるしたいことは、それぞれの自由な時間の開始時間と終了時間と日数の配列である
$meeting = array(array('start' => '2016-11-14 16:00:00',
'end' => '2016-11-14 16:30:00'
),
array('start' => '2016-11-14 16:45:00',
'end' => '2016-11-14 20:00:00'
),
array('start' => '2016-11-14 14:00:00',
'end' => '2016-11-14 15:00:00'
),
array('start' => '2016-11-14 13:00:00',
'end' => '2016-11-14 14:00:00'
),
array('start' => '2016-11-11 15:20:00',
'end' => '2016-11-11 16:00:00'
),
array('start' => '2016-11-11 14:00:00',
'end' => '2016-11-11 15:00:00'
),
array('start' => '2016-11-07 07:00:00',
'end' => '2016-11-09 15:00:00'
)
);
週末を除く毎日09:00〜17:00の間にのみブロックされます。あなたが任意の自由な時間を持つ配列に表示されるだけの日を見ることができるように、11月の7日と8日は何の自由な時間を持っていない
$daily_free = array('2016-11-09' => array(array('free_start' => '15:00:00',
'free_end' => '17:00:00'
)
),
'2016-11-10' => array(array('free_start' => '09:00:00',
'free_end' => '17:00:00'
)
),
'2016-11-11' => array(array('free_start' => '09:00:00',
'free_end' => '14:00:00'
),
array('free_start' => '15:00:00',
'free_end' => '15:20:00'
),
array('free_start' => '16:00:00',
'free_end' => '17:00:00'
)
),
'2016-11-14' => array(array('free_start' => '09:00:00',
'free_end' => '13:00:00'
),
array('free_start' => '15:00:00',
'free_end' => '16:00:00'
),
array('free_start' => '16:30:00',
'free_end' => '16:45:00'
)
)
);
:だからたとえば、会議上記の時間配列は、自由時間の次の配列を生成する必要があります彼らは全く現れません。また、11月12日と13日はフリータイムの配列には表示されません。これは週末になるためです。しかし、12日と13日が週末でなかった場合、自由時間のフル日(09:00〜17:00)としてフリータイム配列に表示されます。
これを達成するために考えられる唯一の方法の1つは、毎日の配列を作成し、その中にNULL値の09:00から17:00までの5分増分の配列を持つことです。次に、この配列をループして、各日付と5分の増分が最初の配列の開始時刻と終了時刻の範囲内にあるかどうかをチェックし、そうであればビジーとしてマークします。私は再びループを繰り返し、毎日のヌル値の開始時刻と終了時刻を取得できますか?これは素晴らしい解決策のようには見えず、会議が数分未満の場合にも失敗します。
私はこの時点で木の木を見ることはできないと思っています。
他に解決策はありますか?
EDIT: SQL Fiddle UNIX時間に日付を変換するためにこれらを使用し、その後、SQL
日のリストを持つテーブルを作成してSQLでジョブを実行するのは簡単ではないでしょうか? [SQLFiddle](http://sqlfiddle.com/)でサンプルデータセットを作成すると、その方法を示すことができます。 –
@AlexBlex SQL Fiddleが質問に追加されました、ありがとう! – superphonic
btw予定がない日はどうなりますか? 12と13のように?彼らは自由時間でなければなりませんが、あなたはあなたの希望する出力にそれらを含めません。 – phobia82