You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将相同营业时间的连续工作日合并为区间格式展示

营业时间区间合并实现方案

实现思路

  • 先过滤掉active_day=0的非营业日期,不参与合并逻辑
  • 初始化临时变量存储当前连续区间的「起始日期」「结束日期」「开门时间」「关门时间」
  • 逐个遍历有效营业日期:
    • 若当前遍历的日期营业时间和临时存储的营业时间完全一致,更新临时变量的结束日期为当前日期
    • 若不一致,将临时变量存储的区间格式化为要求的字符串存入结果集,再用当前日期的信息重置临时变量
  • 遍历结束后,将最后一组未存入结果集的区间补入结果集
  • 单个日期的区间直接展示日期即可,不需要加连接符

代码实现(PHP版本,适配你给出的数组结构)

function mergeBusinessHours($hoursArr) {
    $result = [];
    $currentInterval = null;

    foreach ($hoursArr as $item) {
        // 跳过非营业日期
        if ($item['active_day'] != 1) {
            continue;
        }

        $timeKey = $item['in_time'] . '|' . $item['out_time'];
        // 还没有当前区间,初始化
        if ($currentInterval === null) {
            $currentInterval = [
                'start_day' => $item['day'],
                'end_day' => $item['day'],
                'in_time' => $item['in_time'],
                'out_time' => $item['out_time'],
                'time_key' => $timeKey
            ];
            continue;
        }

        // 营业时间一致,合并区间
        if ($currentInterval['time_key'] == $timeKey) {
            $currentInterval['end_day'] = $item['day'];
        } else {
            // 不一致,先把之前的区间存入结果
            $result[] = formatInterval($currentInterval);
            // 重置当前区间
            $currentInterval = [
                'start_day' => $item['day'],
                'end_day' => $item['day'],
                'in_time' => $item['in_time'],
                'out_time' => $item['out_time'],
                'time_key' => $timeKey
            ];
        }
    }

    // 把最后一个区间加入结果
    if ($currentInterval !== null) {
        $result[] = formatInterval($currentInterval);
    }

    return $result;
}

// 格式化区间为要求的输出格式
function formatInterval($interval) {
    $dayStr = $interval['start_day'];
    if ($interval['start_day'] != $interval['end_day']) {
        $dayStr .= '-' . $interval['end_day'];
    }
    return $dayStr . ' ' . $interval['in_time'] . '-' . $interval['out_time'];
}

// 测试调用
$businessHours = [
    ['day' => 'Sunday', 'in_time' => '', 'out_time' => '', 'active_day' => 0],
    ['day' => 'Monday', 'in_time' => '10:00', 'out_time' => '18:00', 'active_day' => 1],
    ['day' => 'Tuesday', 'in_time' => '10:00', 'out_time' => '18:00', 'active_day' => 1],
    ['day' => 'Wednesday', 'in_time' => '12:00', 'out_time' => '16:00', 'active_day' => 1],
    ['day' => 'Thursday', 'in_time' => '12:00', 'out_time' => '16:00', 'active_day' => 1],
    ['day' => 'Friday', 'in_time' => '10:00', 'out_time' => '19:00', 'active_day' => 1],
    ['day' => 'Saturday', 'in_time' => '', 'out_time' => '', 'active_day' => 0],
];

print_r(mergeBusinessHours($businessHours));

输出结果

Array
(
    [0] => Monday-Tuesday 10:00-18:00
    [1] => Wednesday-Thursday 12:00-16:00
    [2] => Friday 10:00-19:00
)

内容的提问来源于stack exchange,提问作者Ashlesha Agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:24:02