我有以下php代码:
$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-06-01 跳到 2017-06-04 ,然后 2017--06-08 等等。
我不知道为什么会发生这种情况,有人可以告诉我吗?这甚至是正确的方法吗?
当您要在每次迭代中添加1天,您不需要使用索引,只需使用$date->modify("+1 day");
。
另外,请在修改日期之前打印日期。
代码中发生的事情是您开始在第一次迭代中添加0,然后打印实际的一天。下一个迭代,您会添加1,因此明天打印。下一个迭代,您添加2,然后跳过1天。接下来,添加3,然后跳过2天...然后一遍又一遍地。
不要更改 $index
的值,让它等于= 1,甚至尝试在 modify()
函数中尝试" 1天"
for($i=1;$i<=10;$i++)
echo date("y-m-d",strtotime($i." day"))."<br />";
使用此循环
$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;
}