1

对于每日日历应用程序,我想打印一天中从早上九点到晚上八点的时间。我正在使用以下语法,它一直有效到 12。但是,然后我想重新开始编号 1 并让它继续到 8。我知道这可以通过多个 if then 表达式等以更复杂的方式完成,但是希望有一种简洁的方法可以用一种优雅的表达方式来做到这一点。这部分是因为其中有一个数据库查询,我只想写一次。这是基本代码:

PHP
//following works up to 12
for($hourofday = 9; $hourofday <= 12; $hourofday++): 

//I want to do something like following but the following does not work.

//for($hourofday = 9; $hourofday <= 12 || $hourofday >=1 && $hourofday <=8); $hourofday++): 
    $output.= $hourofday.':00';
//This is where dbase is queried for events and there is formatting so it looks like a calendar

endfor

感谢您的任何建议!

4

5 回答 5

3

你可以这样做:

for($hourofday=9; $hourofday <= 20; $hourofday++)
{
    if($hourofday > 12)
        $output .= $hourofday - 12 . ':00';
    else
        $output .= $hourofday . ':00';
}

或更短但更难阅读的方式:

for($hourofday=9; $hourofday <= 20; $hourofday++)
{
    $output .= ($hourofday - ($hourofday > 12 ? 12 : 0)) .':00 ';
}
于 2013-05-18T00:28:59.213 回答
2

最好使用 24 小时模型循环数小时并使用模运算符减少到 1-12 范围以显示:

for ($hourofday = 9; $hourofday <= 20; $hourofday++): 
    $displayhour = $hourofday % 12 ?: 12;
    echo $displayhour.":00\n";
endfor;

看到它在行动

模 12 将小时放在 [0, 11] 范围内,但我们希望显示012-- 这就是三元运算符 ?:的用武之地。

$hourofday您可以通过简单地检查是否小于 12来轻松扩展打印 AM/PM 的逻辑。

于 2013-05-18T00:28:30.920 回答
1
for($hourofday = 9; ; $hourofday = $hourofday%12 +1):
    //do whatever you want, then the last line:
    if($hourofday === 8) break;
endfor
于 2013-05-18T00:27:43.353 回答
1

我想要早上 9 点到 12 点,然后是 1 点到 8 点

在这种情况下,您应该从 9 开始,以 20 结束,并在输出时取模数 12。

于 2013-05-18T00:29:11.760 回答
1

那这个呢?

for($hourofday = 9; $hourofday <= 20; $hourofday++):
  $hr = ($hourofday > 12)?$hourofday-12:$hourofday;
  $output.= $hr.':00';
endfor
于 2013-05-18T00:29:44.997 回答