【问题标题】:Calculate opening times with a part of closed time计算部分关闭时间的开放时间
【发布时间】:2023-03-25 00:52:01
【问题描述】:

这是给我的: $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']; 所以它现在有关闭时间的间隙。

我从哪里开始?我不知道如何计算这个并得到预期的结果。

【问题讨论】:

  • 你的数组没有意义。他们里面应该有类似“星期一”的东西吗?它们是否具有关联性。我如何知道 $openinghours[0] 与 $close[0] 和 [1] 相关联?逻辑是什么?每次打开总是两个“关闭”?
  • 这只是给定日期的一个简化示例,是否是星期一真的那么重要吗?每天可以有多个“关闭”,而不仅仅是两个。它们是随机的,因此需要计算。
  • @splash58 谢谢,这看起来很有希望,基本上是同样的问题!

标签: php arrays time


【解决方案1】:

通过在连字符上展开所有时间范围,您可以手动拼凑打开/关闭时间。

我的解决方案可能对您的项目数据足够稳健,也可能不够稳健。我的解决方案不执行验证,不对关闭的跨度进行排序,并且不检查跨度是否与打开/关闭时间匹配或超过打开/关闭时间。我的 sn-p 严重依赖可信赖的数据。

代码:(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
  • @Sergeant 可能会考虑将此标记为正确答案,以供将来的观众看到。
【解决方案2】:

这可能不是实现此目标的最快方法,但您可以看到它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"
}

【讨论】:

  • 我同意你的观点,由于几个原因,这不是有效的。
  • Tbh,我实际上并没有看到你的答案,因为我多年来一直试图尝试这个问题大声笑我的答案是合法的,就像我能想到的那样,我没想到会看到关于一直爆炸并将它们拼凑成一个新阵列。 @mickmackusa
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2013-08-26
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多