0

我想要一个 PHP for 循环,它会到达某个数字,比如“23”,然后再次从“0”开始。实际上我想要以 24 小时格式列出时间并假设一个案例是:我必须显示从上午 9 点到凌晨 2 点的时间(即 9,10,11,12,13,14,....... ....23,0,1,2)

$i= range(0,23);//it doest work as it creates an array containing a range of elements
$start_time = 9;
$end_time = 2;
for ($i = $start_time ; $i<= $end_time ; $i++)
{
    echo $i;
}

请提出一种方法。

4

9 回答 9

2

由于您的用例提到了时间敏感信息,您最好学习使用dateandstrtotime函数(或DateTime类):

$time = strtotime('2013-09-14 02:00');
$endTime = strtotime('2013-09-15 09:00');

while ($time <= $endTime) {
    echo date('Y-m-d H:i:s', $time)."\n";
    $time = strtotime('+1 hour', $time);
}

// 2013-09-14 02:00:00
// 2013-09-14 03:00:00
// 2013-09-14 04:00:00
// 2013-09-14 05:00:00
// etc.
于 2013-09-19T10:29:43.490 回答
2
$start_time = 9;
$end_time = 2;

$end_time += ($end_time < $start_time) ?  24 : 0;

for ($i = $start_time; $i<= $end_time; $i++) {
    echo ($i % 24);
}

原因,该行$end_time += ($end_time < $start_time) ? 24 : 0;检查结束时间是否小于开始时间(我们假设是第二天),如果是,则增加 24 小时。该行$i %24是模运算符,它将除数并给出余数,所以如果它是25,它会1返回给你。请注意,所有工作时间都需要采用 24 小时格式才能使用此方法。

于 2013-09-19T10:31:22.340 回答
0

当数字大于 23 时,您可以使用模数从数字中减去 24。

$start_time = 9;
$end_time = 2;
for( $i = $start_time; $i % 24 != $end_time; $i++ )
{
    echo $i % 24;
}

请注意,您需要小心这一点;如果$end_time大于 23,它将陷入无限循环。

于 2013-09-19T10:28:43.680 回答
0

试试这个它的工作

<?php
$i= range(0,23);//it doest work as it creates an array containing a range of elements
$start_time = 9;
$end_time = 2;
$max_value=23;
if($start_time>=$end_time)
{
    for ($i = $start_time ; $i<= $max_value; $i++)
    {
        echo $i;
    }
    for($i=0; $i<=$end_time; $i++)  
    {
    echo $i;    
    }
}
else
{
    for ($i = $start_time ; $i<= $max_value; $i++)
    {
        echo $i;
    }
}

?>
于 2013-09-19T10:33:43.377 回答
0

又迟到了,试试这个

<?php
$start_time = 20;
$end_time = 10;

$maxTime=23;
$minTime=0;


for ($i = $minTime ; $i<=$maxTime - abs($start_time-$end_time) ; $i++)
{
    $validTime= $start_time +  ($i % $maxTime);
    $validTime= $validTime>$maxTime?$validTime-$maxTime:$validTime;
    echo $validTime;

}

?>
于 2013-09-19T10:35:01.210 回答
0

它必须是一个for循环吗?你可以试试这个

function hours($range, $recurse = true, $end = array())
{
  foreach($range as $time)
  {
    echo $time . "\n";
  }

  if($recurse && sizeof($end) > 0)
  {
    $range = range($end['start'], $end['end']);
    hours($range, false);
  }
}

$range = range(9,23);
$end = array('start' => 0, 'end' => 2);
hours($range, true, $end);
于 2013-09-19T10:37:43.310 回答
0

看一下这个。希望这可以帮助

$start_time = 9;
$end_time = 2;

$flag = 1;
while($flag) [
    echo $start_time . "<br>";        
    $start_time++;
    if ($start_time == 23) { $start_time = 0; }
    if ($start_time == $end_time) {
        $flag = 0;
    }

}

于 2013-09-19T10:39:46.707 回答
0

也许更好地使用date

$hours = 8;
for ($i=1; $i<=8; $i++){
  echo 'TIME1 = '.date("Y-m-d H:i:s",mktime (20+$i,15,18,06,05,2013)).'<br>';
}

或更好的 DateTime 类

$date = DateTime::createFromFormat('Y-m-d H:i:s', '2013-06-05 20:15:18');
$hours = 8;
for ($i=0; $i<8; $i++){
  $date->add(new DateInterval('PT1H'));
  echo 'TIME2 = '.$date->format('Y-m-d H:i:s').'<br>';
}
于 2013-09-19T10:46:54.980 回答
0

谢谢大家的帮助,用你的想法我完成了我的工作。这是实际工作的代码。

$start_time = some_dynamic_value;
$end_time = some_dynamic_value;
$i= $start_time;
$flag = false;
if($start_time > $end_time)
$flag = true;
while ($i <= $end_time || $flag)
{
        echo $i;

        if($i == 24)
        {
                $i= 0;
                $flag = false;
        }
        $i++;
}
于 2013-09-20T06:28:48.207 回答