在每个循环中重置 DateTime 对象

Reset DateTime object on every loop

使用下面的代码我得到了这个结果

2015-07-15 10:26:12 2015-08-15 10:26:12

2015-08-15 10:26:12 2015-09-15 10:26:12

2015-09-15 10:26:12 2015-10-15 10:26:12

2015-10-15 10:26:12 2015-11-15 10:26:12

这是我想要得到的结果

2015-07-15 10:26:12 2015-08-15 10:26:12

2015-08-15 10:26:12 2015-08-15 10:26:12

2015-07-15 10:26:12 2015-08-15 10:26:12

2015-08-15 10:26:12 2015-08-15 10:26:12

for ($i = 0; $i < 10; $i++) {
   echo  $time->format('Y-m-d h:i:s') . $time->modify('+1 month')->format('Y-m-d h:i:s'); 
}

那么是否可以在每个循环中重置日期时间对象?

您可以使用 DateTimeImmutable 而不是 DateTime。
当您调用 DateTimeImmutable::modify 时,实例不会被修改,但会返回一个具有修改后值的新实例。

<?php
$time = new DateTimeImmutable('07/15/2015 10:26:12');

for ($i = 0; $i < 10; $i++) {
    echo  $time->format('Y-m-d h:i:s'), ' ', $time->modify('+1 month')->format('Y-m-d h:i:s'), "\r\n";
}

打印

2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12
2015-07-15 10:26:12 2015-08-15 10:26:12