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

基于Google日历的预约调度系统:如何识别可预订30分钟连续时段?

检测可预订30分钟连续时段的实现方案

背景

开发对接多Google日历的预约调度系统,已将每日9:00-18:00划分为10分钟间隔的时段(slot),生成包含时段时间及可用状态的数组,需筛选出**连续3个可用状态为yes**的时段,提取这些连续时段的开始时间供用户预订。

实现思路

  1. 遍历时段数组,维护计数器跟踪当前连续可用的slot数量
  2. 遇到available为yes时计数器递增,遇到no时重置计数器
  3. 当计数器达到3及以上时,记录当前连续序列中可作为30分钟预约起始点的时段(即当前slot往前数第2个slot的时间)
  4. 去重整理结果,得到所有符合条件的预约开始时间

代码示例(PHP)

// 原始时段数组
$slots = [
    ['slot' => '2024-01-01 09:00:00', 'available' => 'no'],
    ['slot' => '2024-01-01 09:10:00', 'available' => 'no'],
    ['slot' => '2024-01-01 09:20:00', 'available' => 'no'],
    ['slot' => '2024-01-01 09:30:00', 'available' => 'no'],
    ['slot' => '2024-01-01 09:40:00', 'available' => 'no'],
    ['slot' => '2024-01-01 09:50:00', 'available' => 'no'],
    ['slot' => '2024-01-01 10:00:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 10:10:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 10:20:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 10:30:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 10:40:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 10:50:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 11:00:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 11:10:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 11:20:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 11:30:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 11:40:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 11:50:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 12:00:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 12:10:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 12:20:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 12:30:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 12:40:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 12:50:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 13:00:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 13:10:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 13:20:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 13:30:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 13:40:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 13:50:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 14:00:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 14:10:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 14:20:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 14:30:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 14:40:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 14:50:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 15:00:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 15:10:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 15:20:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 15:30:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 15:40:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 15:50:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 16:00:00', 'available' => 'no'],
    ['slot' => '2024-01-01 16:10:00', 'available' => 'no'],
    ['slot' => '2024-01-01 16:20:00', 'available' => 'no'],
    ['slot' => '2024-01-01 16:30:00', 'available' => 'no'],
    ['slot' => '2024-01-01 16:40:00', 'available' => 'no'],
    ['slot' => '2024-01-01 16:50:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 17:00:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 17:10:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 17:20:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 17:30:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 17:40:00', 'available' => 'yes'],
    ['slot' => '2024-01-01 17:50:00', 'available' => 'yes']
];

$availableStartTimes = [];
$consecutiveYes = 0;

foreach ($slots as $index => $slot) {
    if ($slot['available'] === 'yes') {
        $consecutiveYes++;
        // 连续可用数达标时,记录对应起始时段
        if ($consecutiveYes >= 3) {
            $startSlot = $slots[$index - 2];
            $availableStartTimes[] = $startSlot['slot'];
        }
    } else {
        $consecutiveYes = 0;
    }
}

// 去重确保每个起始时间唯一
$availableStartTimes = array_unique($availableStartTimes);

// 输出符合条件的预约起始时间
print_r($availableStartTimes);

结果说明

运行代码后,$availableStartTimes数组将包含所有可预订的30分钟时段起始点,例如:

  • 2024-01-01 10:00:00(对应10:00-10:30)
  • 2024-01-01 10:10:00(对应10:10-10:40)
  • ...
  • 2024-01-01 15:30:00(对应15:30-16:00)
  • 2024-01-01 16:50:00(对应16:50-17:20)

这些时间可直接展示给用户选择预订。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:45:55