I have a system that accepts user submissions, and upon receiving a submission the system will go through all timeslots to find the appropriate timeslot. The problem is that it needs to be able to check against the start & end times if the end time laps to the next day.
Take the following example: A timeslot begins at 10:30 PM on the current day and ends at 4:00 PM the next day. If the current time is between 10:30 PM and 11:59:59 PM, the submission will be assigned to that timeslot. However, if the current time is between 12:00 AM and 4:00 PM then it will skip the timeslot.
This is what I have so far:
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";
}
}
If the current time is 23:00:00, then the result would be
false
true
But if the current time is 12:00:00 then the result would be
false
false
even though it's technically between the two times.
I know it has to do with the fact that if it's a new day, then the strtotime
result for $from
will be later in the day. So instead of checking for 10:30 PM yesterday, it checks for 10:30 PM tonight.
My problem is that I cannot seem to come up with a way to make the $from
time switch to the previous day if it needs to, similar to how I force the $to
time into the next day.