164 行
5.5 KiB
PHP
164 行
5.5 KiB
PHP
<?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";
|
||
?>
|