Как отобразить все временные интервалы между двумя временами

У меня есть приложение Laravel, в котором мне нужно отображать все временные интервалы с 9:00 до 3:00 на основе 15-минутного интервала. временные интервалы не содержат даты, только формат времени, например (AM и PM)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
2 834
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот независимая от фреймворка функция

 /**
         * 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('03:00', '15 минут', '09:00');

Lb Abid 23.12.2020 13:48

Но мое требование: $period = new CarbonPeriod('14:00', '15 минут', '03:00');

Lb Abid 23.12.2020 13:49

Когда я использую «новый CarbonPeriod («14:00», «15 минут», «03:00»), он возвращает пустой массив.

Lb Abid 23.12.2020 13:50

как выглядят мои ожидания ниже 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

Lb Abid 23.12.2020 13:55

хорошо, но мое время окончания 3 часа ночи, в этом проблема

Lb Abid 23.12.2020 15:56

время начала 15:00, время окончания 02:00

Lb Abid 24.12.2020 13:49

Я думаю, что нет, поскольку вы знаете, что время окончания AM означает следующий день, поэтому использовать этот код невозможно.

Lb Abid 24.12.2020 14:31

@LbAbid не будет никакой разницы, будет ли это на следующий день или в тот же день, и если вы хотите, чтобы и то и другое было в другой день, вам нужно добавить дату и время.

Kamlesh Paul 24.12.2020 16:10

Спасибо за ваш ответ, что я имею в виду, это время с 14:00 до 3:00, здесь 3:00 будет завтра,

Lb Abid 26.12.2020 09:02

@LbAbid я добавил в соответствии с вашими потребностями, проверьте это

Kamlesh Paul 26.12.2020 11:55

Да, это то, о чем я говорил, так как завтра будет 3 часа ночи, нам нужно добавить еще одну дату

Lb Abid 27.12.2020 09:20

Другие вопросы по теме