init: import production code mss.nahaichuan.com (exclude Runtime/Uploads/backups/logs)
这个提交包含在:
164
test_business_time.php
普通文件
164
test_business_time.php
普通文件
@@ -0,0 +1,164 @@
|
||||
<?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";
|
||||
?>
|
||||
在新工单中引用
屏蔽一个用户