120) { return 120; } return $n; } /** * 左闭右开 [start, end) 按 slotMinutes 切分,得到每个号的开始时刻 HH:mm */ public static function generateSlotTimes(string $start, string $end, int $slotMinutes): array { $slotMinutes = self::normalizeSlotMinutes($slotMinutes); $base = '1970-01-01 '; $cur = strtotime($base . $start . ':00'); $endTs = strtotime($base . $end . ':00'); if ($cur === false || $endTs === false || $endTs <= $cur) { return []; } $times = []; $step = $slotMinutes * 60; while ($cur < $endTs) { $times[] = date('H:i', $cur); $cur += $step; } return $times; } /** * quota>0 时限制最大可约槽位数;quota=0 表示不限制(由时段长度决定) */ public static function applyQuotaCap(array $times, int $quota): array { if ($quota > 0 && count($times) > $quota) { return array_slice($times, 0, $quota); } return $times; } }