1

可能有一种更简单的方法可以做到这一点。鉴于我对 PHP 的新手技能水平,我想我在构建它的方式上存在一些严重的错误。我谦虚地接受任何批评,因为我刚刚开始,并且很高兴学习更好的做法。

但是,我试图将时间划分为两个小时的时间块。代码是根据每个块进行注释的,但如果当前是下午 5:30,我想说一个在“下午 4:00 到下午 6:00”时间块内。

我不完全确定我将如何构造 if 语句以正确选择时间。我认为一组更有经验的眼睛可能能够指出一个解决方案。当前包含的 if 语句不起作用,仅作为示例包含在内。

这显然是更大脚本的一部分,但我很确定问题出在以下代码中。但是,如有必要,我可以包含整个脚本。

<?php

date_default_timezone_set('America/Chicago'); // Set default time zone
$currenttime = date("G"); // Set the time in 24 hour format, no leading zeroes

if (0 >= $currenttime && $currenttime < 8) {
    $thisblock="00:00:00"; // Overnights
}

if (8 >= $currenttime && $currenttime < 10) {
    $thisblock="08:00:00"; // Eight to ten.
}

if (10 >= $currenttime && $currenttime < 12) {
    $thisblock="10:00:00"; // Ten to noon.
}

if (12 >= $currenttime && $currenttime < 14) {
    $thisblock="12:00:00"; // Noon to 2:00 PM.
}

if (14 >= $currenttime && $currenttime < 16) {
    $thisblock="14:00:00"; // 2:00 PM to 4:00 PM
}

if (16 >= $currenttime && $currenttime < 18) {
    $thisblock="16:00:00"; // 4:00 PM to 6:00 PM
}

if (18 >= $currenttime && $currenttime < 20) {
    $thisblock="18:00:00"; // 6:00 PM to 8:00 PM
}

if (20 >= $currenttime && $currenttime < 22) {
    $thisblock="20:00:00"; // 8:00 PM to 10:00 PM
}

if (22 >= $currenttime && $currenttime < 24) { 
    $currentblock="22:00:00"; // 10:00 PM to midnight
}

?>
4

2 回答 2

1

根据你的描述,这将做你想要的:

function get_time_block($currenttime)
{
    // if time is before 8, we'll just return the first, 8-hour block
    if ($currenttime < 8)
    {
        return '00:00:00';
    }

    // otherwise, return the first dividable-by-two number before this number as a block
    return sprintf("%02d:00:00", $currenttime - $currenttime%2);
}

要测试它:

for ($i = 0; $i < 24; $i++)
{
    print($i . ': ' . get_time_block($i) . '<br />');
}

这输出:

0: 00:00:00
1: 00:00:00
2: 00:00:00
3: 00:00:00
4: 00:00:00
5: 00:00:00
6: 00:00:00
7: 00:00:00
8: 08:00:00
9: 08:00:00
10: 10:00:00
11: 10:00:00
12: 12:00:00
13: 12:00:00
14: 14:00:00
15: 14:00:00
16: 16:00:00
17: 16:00:00
18: 18:00:00
19: 18:00:00
20: 20:00:00
21: 20:00:00
22: 22:00:00
23: 22:00:00

..这似乎是你要找的。

于 2012-12-16T01:11:02.947 回答
0

您可以使用一个简单的公式获得任何一组间隔,该公式将花费时间并将其“四舍五入”到正确的间隔。在你的情况下,你会想要这样的东西:

ceil($time/$interval)*$interval

因此,在您的情况下,您可以执行以下操作:

$current_hour = date('G');
$check_hour = ceil($current_hour/2)*2;
switch ($check_hour) {
case 2:
...
case 4:
...
}

如果你想改变时间,这很容易。类似的公式适用于任何时间间隔(小时、分钟、秒等)。

于 2012-12-16T03:22:32.503 回答