Рассчитать время открытия с частью закрытого времени - PullRequest
0 голосов
/ 13 декабря 2018

Это то, что мне дано: $openinghours = ['09:00-18:00'];

Теперь может быть несколько частей «закрытого времени», например: $closed[] = '11:30-12:15'; $closed[] = '16:00-16:30';

Мне нужно получить новыйвремя открытия, вот так: $openinghours = ['09:00-11:30,'12:15-16:00','16-30-18:00']; Так что теперь в нем есть промежутки времени закрытия.

С чего начать?Я совершенно не знаю, как рассчитать это и получить ожидаемый результат.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Возможно, это не самый быстрый способ добиться этого, но вы можете видеть, как он работает здесь .

$openingHours = ['09:00-18:00'];
$closedHours  = ['11:30-12:15', '16:00-16:30'];

$openStart  = explode("-", $openingHours[0])[0]; # 09:00
$openFinish = explode("-", $openingHours[0])[1]; # 18:00

$hours = [];

foreach($closedHours as $closed)
    $hours[] = explode('-', $closed);

$dynamicHours = ["{$openStart}-"];

for($i = 0; $i <= count($hours) -1; $i++) {
    $dynamicHours[$i] .= $hours[$i][0];
    $dynamicHours[]    = "{$hours[$i][1]}-";
}

$dynamicHours[count($dynamicHours) -1] .= $openFinish;

var_dump($dynamicHours);

Это дает вам вывод

array(3) {
  [0]=>
  string(11) "09:00-11:30"
  [1]=>
  string(11) "12:15-16:00"
  [2]=>
  string(11) "16:30-18:00"
}
0 голосов
/ 13 декабря 2018

Разобрав все временные диапазоны на дефисы, вы можете вручную соединить время открытия / закрытия.

Мое решение может быть или не быть достаточно надежным для данных вашего проекта.Мое решение не выполняет проверку, не сортирует закрытые промежутки и не проверяет, соответствует ли промежуток времени открытия / закрытия ИЛИ превышает время открытия / закрытия.Мой фрагмент сильно зависит от достоверных данных.

Код: ( Демо )

$openinghours = ['09:00-18:00']; 
$closed[] = '11:30-12:15';
$closed[] = '16:00-16:30';

[$start, $end] = explode('-', $openinghours[0]);
foreach ($closed as $span) {
    [$shut, $reopen] = explode('-', $span);
    $result[] = $start . '-' . $shut;
    $start = $reopen;
}
$result[] = $start . '-' . $end;
var_export($result);

Вывод:

array (
  0 => '09:00-11:30',
  1 => '12:15-16:00',
  2 => '16:30-18:00',
)

Если ваша версия php не поддерживает деструктуризацию массива, вы можетезвоните list() с explode().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...