根据时间显示文本PHP

时间:2015-12-30 22:05:25

标签: php

我使用以下代码显示整个星期的开始和结束时间,但是在星期二,开放时间是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;
}

?>

6 个答案:

答案 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;
}

?>