Вот независимая от фреймворка функция
/**
* get a list of hours btw two range
*
* @param int $lower start hours in secondes
* @param int $upper end hours in secondes
* @param int $step hop btw hours in seconde
* @param null $format output hours format
*
* @return array with hours range interval
* Exemple of use: // Every 30 Minutes from 8 AM - 5 PM, using Custom Time Format: hoursRange( 28800, 61200, 60 * 30, 'h:i a' );
*/
function hoursRange($lower = 0, $upper = 86400, $step = 1800, $format = 'H:i')
{
$times = [];
if (empty($format))
{
$format = 'H:i';
}
foreach (range($lower, $upper, $step) as $increment)
{
$increment = gmdate('H:i', $increment);
list($hour, $minutes) = explode(':', $increment);
$date = new \DateTime($hour.':'.$minutes);
$times[(string)$increment] = $date->format($format);
}
return $times;
}
Пример использования с выводом:
hoursRange(0, 86400, 1800, 'H:i')
array:48 [▼
"00:00" => "00:00"
"00:30" => "00:30"
"01:00" => "01:00"
"01:30" => "01:30"
"02:00" => "02:00"
"02:30" => "02:30"
"03:00" => "03:00"
"03:30" => "03:30"
"04:00" => "04:00"
"04:30" => "04:30"
"05:00" => "05:00"
"05:30" => "05:30"
"06:00" => "06:00"
"06:30" => "06:30"
"07:00" => "07:00"
"07:30" => "07:30"
"08:00" => "08:00"
"08:30" => "08:30"
"09:00" => "09:00"
"09:30" => "09:30"
"10:00" => "10:00"
"10:30" => "10:30"
"11:00" => "11:00"
"11:30" => "11:30"
"12:00" => "12:00"
"12:30" => "12:30"
"13:00" => "13:00"
"13:30" => "13:30"
//etc .......
]
ты карбон CarbonPeriod
use Carbon\CarbonPeriod;
$period = new CarbonPeriod('03:00', '15 minutes', '14:00'); // for create use 24 hours format later change format
$slots = [];
foreach($period as $item){
array_push($slots,$item->format("h:i A"));
}
return $slots;
согласно вашему требованию. вам нужно использовать вот так
$today = today()->format('Y-m-d') . " 2:00 PM";
$tomorrow = today()->addDays('1')->format('Y-m-d') . " 3:00 AM";
$period = new CarbonPeriod(new Carbon($today), '15 minutes', new Carbon($tomorrow));
$slots = [];
foreach ($period as $item) {
array_push($slots, $item->format("h:i A"));
}
он возвращается
[
"02:00 PM",
"02:15 PM",
"02:30 PM",
"02:45 PM",
"03:00 PM",
"03:15 PM",
"03:30 PM",
"03:45 PM",
"04:00 PM",
"04:15 PM",
"04:30 PM",
"04:45 PM",
"05:00 PM",
"05:15 PM",
"05:30 PM",
"05:45 PM",
"06:00 PM",
"06:15 PM",
"06:30 PM",
"06:45 PM",
"07:00 PM",
"07:15 PM",
"07:30 PM",
"07:45 PM",
"08:00 PM",
"08:15 PM",
"08:30 PM",
"08:45 PM",
"09:00 PM",
"09:15 PM",
"09:30 PM",
"09:45 PM",
"10:00 PM",
"10:15 PM",
"10:30 PM",
"10:45 PM",
"11:00 PM",
"11:15 PM",
"11:30 PM",
"11:45 PM",
"12:00 AM",
"12:15 AM",
"12:30 AM",
"12:45 AM",
"01:00 AM",
"01:15 AM",
"01:30 AM",
"01:45 AM",
"02:00 AM",
"02:15 AM",
"02:30 AM",
"02:45 AM",
"03:00 AM"
]
реф ссылка https://carbon.nesbot.com/docs/#api-period
Но мое требование: $period = new CarbonPeriod('14:00', '15 минут', '03:00');
Когда я использую «новый CarbonPeriod («14:00», «15 минут», «03:00»), он возвращает пустой массив.
как выглядят мои ожидания ниже 14:00 14:30 15:00 15:30 16:00 16:30 " 00:00 00:30 01:00 01:30 02:00 02:30 03:00
хорошо, но мое время окончания 3 часа ночи, в этом проблема
время начала 15:00, время окончания 02:00
Я думаю, что нет, поскольку вы знаете, что время окончания AM означает следующий день, поэтому использовать этот код невозможно.
@LbAbid не будет никакой разницы, будет ли это на следующий день или в тот же день, и если вы хотите, чтобы и то и другое было в другой день, вам нужно добавить дату и время.
Спасибо за ваш ответ, что я имею в виду, это время с 14:00 до 3:00, здесь 3:00 будет завтра,
@LbAbid я добавил в соответствии с вашими потребностями, проверьте это
Да, это то, о чем я говорил, так как завтра будет 3 часа ночи, нам нужно добавить еще одну дату
Я ценю это.., исходя из вашего решения, это $period = new CarbonPeriod('03:00', '15 минут', '09:00');