ユーザーの送信を受け入れるシステムがあり、送信を受信すると、システムはすべてのタイムスロットを調べて適切なタイムスロットを見つけます。問題は、終了時刻が翌日になる場合、開始時刻と終了時刻をチェックできる必要があることです。
次の例を見てください: タイムスロットは、当日の午後 10 時 30 分に開始し、翌日の午後 4 時に終了します。現在の時刻が午後 10 時 30 分~午後 11 時 59 分 59 秒の場合、提出物はそのタイムスロットに割り当てられます。ただし、現在の時刻が午前 0 時から午後 4 時の間である場合、タイムスロットはスキップされます。
これは私がこれまでに持っているものです:
function check_time($from, $to, $time) {
$time = strtotime($time);
$from = strtotime($from);
$to_ = strtotime($to);
$to = $to_ <= $from ? strtotime($to . " tomorrow") : $to_;
return ($time >= $from && $time <= $to);
}
$timeslots = array(
array("16:00:00", "22:30:00"),
array("22:30:00", "16:00:00")
);
foreach ($timeslots as $slot) {
if (check_time($slot[0], $slot[1], date("H:i:s")))
{
echo "true\n";
}
else
{
echo "false\n";
}
}
現在の時刻が 23:00:00 の場合、結果は次のようになります。
false
true
ただし、現在の時刻が 12:00:00 の場合、結果は次のようになります。
false
false
技術的には2つの時間の間にありますが。
それが新しい日である場合、strtotime
結果$from
はその日の後半になるという事実に関係していることを私は知っています。したがって、昨日の午後 10 時 30 分をチェックする代わりに、今夜の午後 10 時 30 分をチェックします。
$from
私の問題は、時間を翌日に強制する方法と同様に、必要に応じて時間を前日に切り替える方法を思いつかないように見えることです$to
。