此
$date = new DateTime();
for($i = 0; $i < 5; $i++) {
$dates[$i] = $date;
$date->modify('+1 day');
}
var_dump($dates);
给了我一系列相同的日期对象,比如8月16日,如果今天是8月12日。
有什么想法吗?
PS。例如,将循环中的$ date更改为$ date-&gt; getTimeStamp,它按预期工作...
答案 0 :(得分:4)
那是因为modify()作用于对象本身;并且您正在构建一个包含指向 相同 对象的5个指针的数组,该对象在循环的每次迭代中都会被修改,因此它们都将指向具有的DateTime对象已修改为上次日期
$date = new DateTime();
for($i = 0; $i < 5; $i++) {
$dates[$i] = clone $date;
$date->modify('+1 day');
}