3v4l.org

run code in 300+ PHP versions simultaneously
<?php function getTimeSlot($str) { $arr = [ "2022-09-23 08:00:00", "2022-09-23 08:30:00", "2022-09-23 09:00:00", "2022-09-23 09:30:00", "2022-09-23 10:00:00", "2022-09-23 10:30:00", "2022-09-23 11:00:00", "2022-09-23 13:00:00", "2022-09-23 13:30:00", "2022-09-23 14:00:00", "2022-09-23 14:30:00", "2022-09-23 15:00:00", "2022-09-23 16:00:00", "2022-09-23 16:30:00", "2022-09-23 17:00:00", "2022-09-23 17:30:00", "2022-09-23 17:30:00", ]; $final_datetime = "$str is not within timeslots."; $format = 'Y-m-d H:i:s'; $d = DateTime::createFromFormat($format, $str); foreach ($arr as $k => $v) { if ($v === $str) { $final_datetime = $v; break; } else { $prevDatetime = false; $nextDateTime = false; $prevStr = ""; $nextStr = ""; if (isset($arr[$k - 1])) { $prevStr = $arr[$k - 1]; } if (isset($arr[$k + 1])) { $nextStr = $arr[$k + 1]; } if ($prevStr) { $prevDatetime = DateTime::createFromFormat($format, $prevStr); } if ($nextStr) { $nextDateTime = DateTime::createFromFormat($format, $nextStr); } if ($prevDatetime && $nextDateTime && $d && ($d > $prevDatetime && $d < $nextDateTime)){ $final_datetime = $prevStr; } } } return $final_datetime; } $strings = [ "2022-09-23 07:15:00", "2022-09-23 08:00:00", "2022-09-23 08:01:00", "2022-09-23 08:29:00", "2022-09-23 08:30:00", "2022-09-23 08:31:00", "2022-09-23 09:12:00", "2022-09-23 11:29:23", "2022-09-23 15:59:00", "2022-09-23 16:29:00", "2022-09-23 16:30:00", "2022-09-23 16:31:00", "2022-09-23 16:59:00", "2022-09-23 17:00:00", "2022-09-23 17:01:00", "2022-09-23 17:29:00", "2022-09-23 17:30:00", "2022-09-23 17:31:00", "2022-09-23 18:59:00" ]; foreach ($strings as $s) { echo $s . " --> " . getTimeSlot($s) . PHP_EOL; }
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
2022-09-23 07:15:00 --> 2022-09-23 07:15:00 is not within timeslots. 2022-09-23 08:00:00 --> 2022-09-23 08:00:00 2022-09-23 08:01:00 --> 2022-09-23 08:00:00 2022-09-23 08:29:00 --> 2022-09-23 08:00:00 2022-09-23 08:30:00 --> 2022-09-23 08:30:00 2022-09-23 08:31:00 --> 2022-09-23 08:30:00 2022-09-23 09:12:00 --> 2022-09-23 09:00:00 2022-09-23 11:29:23 --> 2022-09-23 11:00:00 2022-09-23 15:59:00 --> 2022-09-23 15:00:00 2022-09-23 16:29:00 --> 2022-09-23 16:00:00 2022-09-23 16:30:00 --> 2022-09-23 16:30:00 2022-09-23 16:31:00 --> 2022-09-23 16:30:00 2022-09-23 16:59:00 --> 2022-09-23 16:30:00 2022-09-23 17:00:00 --> 2022-09-23 17:00:00 2022-09-23 17:01:00 --> 2022-09-23 17:00:00 2022-09-23 17:29:00 --> 2022-09-23 17:00:00 2022-09-23 17:30:00 --> 2022-09-23 17:30:00 2022-09-23 17:31:00 --> 2022-09-23 17:31:00 is not within timeslots. 2022-09-23 18:59:00 --> 2022-09-23 18:59:00 is not within timeslots.

preferences:
94.09 ms | 409 KiB | 5 Q