计算营业时间与部分营业时间

时间:2018-12-13 13:52:23

标签: php arrays time

这是给我的: $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 :(得分:1)

通过分解连字符上的所有时间范围,您可以手动拼合打开/关闭时间。

对于您的项目数据,我的解决方案可能不够健壮。我的解决方案不执行验证,不对闭合范围进行排序,也不检查范围是否与打开/关闭时间匹配或超过打开/关闭时间。我的代码片段严重依赖可信赖的数据。

代码:(Demo

$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()

答案 1 :(得分:0)

这可能不是实现此目标的最快方法,但是您可以working here看到它。

$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"
}