2017-05-29 74 views
0

我有下面的PHP代码:PHP环获得今天的日期和下面的9天

$date = new DateTime(); 
$date->setTimeZone(new DateTimeZone('America/New_York')); 
$index = 0; 


while($index <10){ 
    $date->modify('+'. $index .' day'); 
    print $date->format('Y-m-d') . ' - index: ' . $index . '<br/>'; 
    $index++; 
} 

什么这个脚本应该做的事:应该显示在接下来的几天今天的日期和接下来的9个日期:(我每次都打印$ index值以确保索引始终正确)。

这实际显示:

2017-05-29 - index: 0 
2017-05-30 - index: 1 
2017-06-01 - index: 2 
2017-06-04 - index: 3 
2017-06-08 - index: 4 
2017-06-13 - index: 5 
2017-06-19 - index: 6 
2017-06-26 - index: 7 
2017-07-04 - index: 8 
2017-07-13 - index: 9 

注:了解如何从日期2017年6月1日跳到2017年6月4日再到2017-06- 08等。

我不知道为什么会发生这种情况,有人可以告诉我吗?这甚至是正确的方法吗?

+0

这是正常它会打印2017-06-01,下一张是2017-06-04导致索引从1变为3!它就像增加3天而不是一个! –

回答

4

由于您想在每次迭代中添加1天,因此您不需要使用总和上的索引,只需使用$date->modify("+1 day");即可。

此外,请在修改之前将打印日期的行放在上面。

你的代码发生了什么,你开始在第一次迭代中加0,然后你打印实际的日子。下一次迭代,你加1,所以明天打印。下一次迭代,您添加2,并跳过1天。接下来,添加3,并跳过2天...而且这一遍又一遍。

+0

是的,你是对的,这是一段代码简化和更复杂的脚本的剪切和索引应该在其他地方使用,我在这里意外地使用它,初学者的错误:))谢谢你 –

1

不要更改$index值让它等于= 1,甚至尝试在modify()函数做“+1日”

1
for($i=1;$i<=10;$i++) 
echo date("y-m-d",strtotime($i." day"))."<br />"; 
0

使用此循环

$begin = new DateTime("2017-05-29"); 
$end = new DateTime("2017-06-8"); 
$end = $end->modify('+1 day'); 
$interval = DateInterval::createFromDateString('1 day'); 

$index = 0; 
foreach ($period as $dt) { 
    if ($index == 9) { 
     break; 
    } 

    echo $dt->format("Y-m-d"); 
    $index = $index + 1; 
}