文件
mashangyoujiu/_ai_archive/scripts/test_business_time.php

164 行
5.5 KiB
PHP

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
/**
* 测试营业时间验证功能
*/
// 引入必要的文件
require_once 'Application/Common/Common/function.php';
// 模拟BaseController中的营业时间验证方法
function isCurrentTimeInBusinessHours($businessTime) {
if (empty($businessTime)) {
return false;
}
// 解析多个时间段(逗号分隔)
$timePeriods = explode(',', $businessTime);
$currentTime = date('H:i');
$currentMinutes = timeToMinutes($currentTime);
foreach ($timePeriods as $period) {
$period = trim($period);
if (empty($period)) continue;
// 解析时间段格式:HH:MM-HH:MM
if (preg_match('/^(\d{2}:\d{2})-(\d{2}:\d{2})$/', $period, $matches)) {
$startTime = $matches[1];
$endTime = $matches[2];
if (!isValidTimeFormat($startTime) || !isValidTimeFormat($endTime)) {
continue;
}
$startMinutes = timeToMinutes($startTime);
$endMinutes = timeToMinutes($endTime);
// 处理跨天的情况
if ($startMinutes > $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";
?>