$endMinutes) { // 跨天营业时间:例如 22:00-06:00 if ($currentMinutes >= $startMinutes || $currentMinutes <= $endMinutes) { return true; } } else { // 同一天营业时间:例如 09:00-22:00 if ($currentMinutes >= $startMinutes && $currentMinutes <= $endMinutes) { return true; } } } } return false; } function isValidTimeFormat($time) { return preg_match('/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/', $time); } function timeToMinutes($time) { list($hours, $minutes) = explode(':', $time); return intval($hours) * 60 + intval($minutes); } // 测试用例 echo "=== 营业时间验证功能测试 ===\n\n"; $testCases = [ [ 'name' => '单时段营业时间(当前在营业时间内)', 'business_time' => '09:00-22:00', 'current_time' => '15:30' ], [ 'name' => '单时段营业时间(当前不在营业时间内)', 'business_time' => '09:00-22:00', 'current_time' => '23:30' ], [ 'name' => '多时段营业时间(当前在第一个时段内)', 'business_time' => '09:00-12:00,14:00-22:00', 'current_time' => '10:30' ], [ 'name' => '多时段营业时间(当前在第二个时段内)', 'business_time' => '09:00-12:00,14:00-22:00', 'current_time' => '18:30' ], [ 'name' => '多时段营业时间(当前在休息时间)', 'business_time' => '09:00-12:00,14:00-22:00', 'current_time' => '13:00' ], [ 'name' => '跨天营业时间(当前在营业时间内-晚上)', 'business_time' => '22:00-06:00', 'current_time' => '23:30' ], [ 'name' => '跨天营业时间(当前在营业时间内-早上)', 'business_time' => '22:00-06:00', 'current_time' => '05:30' ], [ 'name' => '跨天营业时间(当前不在营业时间内)', 'business_time' => '22:00-06:00', 'current_time' => '15:30' ], [ 'name' => '复杂多时段包含跨天', 'business_time' => '09:00-12:00,14:00-18:00,22:00-02:00', 'current_time' => '01:00' ] ]; foreach ($testCases as $index => $testCase) { echo ($index + 1) . ". " . $testCase['name'] . "\n"; echo " 营业时间: " . $testCase['business_time'] . "\n"; echo " 当前时间: " . $testCase['current_time'] . "\n"; // 临时修改当前时间进行测试 $originalTime = date('H:i'); // 模拟当前时间 $testTime = $testCase['current_time']; // 手动计算结果 $timePeriods = explode(',', $testCase['business_time']); $testMinutes = timeToMinutes($testTime); $inBusinessTime = false; foreach ($timePeriods as $period) { $period = trim($period); if (empty($period)) continue; if (preg_match('/^(\d{2}:\d{2})-(\d{2}:\d{2})$/', $period, $matches)) { $startTime = $matches[1]; $endTime = $matches[2]; $startMinutes = timeToMinutes($startTime); $endMinutes = timeToMinutes($endTime); if ($startMinutes > $endMinutes) { // 跨天 if ($testMinutes >= $startMinutes || $testMinutes <= $endMinutes) { $inBusinessTime = true; break; } } else { // 同一天 if ($testMinutes >= $startMinutes && $testMinutes <= $endMinutes) { $inBusinessTime = true; break; } } } } echo " 结果: " . ($inBusinessTime ? "在营业时间内" : "不在营业时间内") . "\n\n"; } echo "=== 测试完成 ===\n"; echo "当前实际时间: " . date('H:i') . "\n"; echo "使用实际时间测试营业时间 '09:00-22:00': " . (isCurrentTimeInBusinessHours('09:00-22:00') ? "在营业时间内" : "不在营业时间内") . "\n"; echo "使用实际时间测试营业时间 '09:00-12:00,14:00-22:00': " . (isCurrentTimeInBusinessHours('09:00-12:00,14:00-22:00') ? "在营业时间内" : "不在营业时间内") . "\n"; ?>