我使用以下代码显示整个星期的开始和结束时间,但是在星期二,开放时间是10:30。它似乎想要坐在10或11。我已经在PHP变量中尝试了10.5,但是没有做出改变。有什么建议?
<?php
date_default_timezone_set('Europe/London'); // set it to the right value
$weAreOpen = areWeOpen(date('l'), date('G'));
if($weAreOpen) {
echo 'We are open for business';
} else {
echo 'We are closed';
}
/**
* Test if we're open for business
* @param string $day - day of week (ex: Monday)
* @param string $hour - hour of day (ex: 9)
* @return bool - true if open interval
*/
function areWeOpen($day, $hour) {
$hour = (int)$hour;
switch($day) {
case 'Monday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Tuesday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Wednesday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Thursday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Friday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Saturday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Sunday':
if($hour >= 10 && $hour < 16) {
return true;
}
break;
}
return false;
}
?>
答案 0 :(得分:2)
您应该了解PHP manual for date()中date('G')
实际执行的操作。它为您提供24小时格式的小时。所以,自然,永远不会有0.5小时。
要检查半小时,您可以从此处获取分钟数,但一般情况下,可能有一个更好的解决方案,而不是单独检查时钟的所有部分,例如检查当天的时间是低于还是高于某事。
答案 1 :(得分:1)
你只需要将分钟作为函数参数传递,并在if条件下使用它
<?php
date_default_timezone_set('Europe/London'); // set it to the right value
$weAreOpen = areWeOpen(date('l'), date('G'), date('i'));
if($weAreOpen) {
echo 'We are open for business';
} else {
echo 'We are closed';
}
/**
* Test if we're open for business
* @param string $day - day of week (ex: Monday)
* @param string $hour - hour of day (ex: 9)
* @return bool - true if open interval
*/
function areWeOpen($day, $hour, $minutes) {
$hour = (int)$hour;
switch($day) {
case 'Monday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Tuesday':
if($hour >= 11 && $hour < 21 || ($hour == 10 && $minutes >= 30)) {
return true;
}
break;
case 'Wednesday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Thursday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Friday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Saturday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Sunday':
if($hour >= 10 && $hour < 16) {
return true;
}
break;
}
return false;
}
?>
答案 2 :(得分:0)
您将变量转换为函数第一行中的整数:
$hour = (int)$hour;
因此,在此之后,小时编号之后的任何信息都将丢失。
删除该行可以解决这个问题。
顺便说一下,我没有看到你职能部门的任何逻辑占据了周二的开放时间。
您应该首先决定格式(实时或浮动)并相应地调整您的逻辑。我可能会使用DateTime对象存储有关您查询的那一刻的所有信息,并且可以让您扩展假期功能等。
答案 3 :(得分:0)
您还应该将分钟信息发送到您的功能并进行检查。
$weAreOpen = areWeOpen(date('l'), date('G'), date('i'));
...
...
function areWeOpen($day, $hour, $minutes) {
...
// check the minutes value as well
...
}
答案 4 :(得分:0)
如果你想在&#34; 10:30&#34;等时间做出反应,你需要加入分钟而不仅仅是几小时。试试这个:
select
答案 5 :(得分:0)
我会建议其他人已经拥有的内容,如果您想要查看半小时,则需要包含minutes
。虽然,我也只是其余的代码:
<?php
$weAreOpen = areWeOpen(date('l'), date('G'), date('i'));
if($weAreOpen) {
echo 'We are open for business';
} else {
echo 'We are closed';
}
/**
* Test if we're open for business
* @param string $day - day of week (ex: Monday)
* @param string $hour - hour of day (ex: 9)
* @param int $min - Minute of the hour
* @return bool - true if open interval
*/
function areWeOpen($day, $hour, $min) {
$hour = (int)$hour;
switch($day) {
case 'Monday':
case 'Wednesday':
case 'Thursday':
case 'Friday':
case 'Saturday':
if($hour >= 9 && $hour < 21) {
return true;
}
break;
case 'Tuesday':
if(($hour >= 11 && $hour < 21) || ($min >= 30 && $hour == 10)) {
return true;
}
break;
case 'Sunday':
if($hour >= 10 && $hour < 16) {
return true;
}
break;
}
return false;
}
?>