【发布时间】:2018-08-14 13:36:55
【问题描述】:
所以我在使用 DateTimes modify() 函数时遇到了一个奇怪的问题。
我从 DateTime 开始,例如:2018-08-07 12:00 以及要添加的天数,例如:2。
我将 dateTime(在变量 $startDt 中)复制到一个新变量 ($date),这样它就不会受到任何更改的影响。
修改功能工作正常。我得到 2018-08-09 12:00。但后来我想用一个新号码重复这个动作,但开始日期相同。说 +3。
但是一共加了5个!我检查并在 $date 上使用 modify() 时;它也以某种方式改变了 $startDt。
谁能向我解释这个奇迹? :)) 将函数应用于变量 2 会如何影响变量 1?即使变量 2 最初是变量 1 的克隆;它们应该是 2 个独立的实体...
while ($x < $duration) {
$date = $startDt;
echo "$startDt before:" . $startDt->format('Y-m-d') . "<br>";
$date = $date->modify('+' . $x . 'day');
echo "$startDt after:" . $startDt->format('Y-m-d') . "<br>";
$x++;
}
结果:
$startDt before +2 : 2018-08-08
$startDt after: 2018-08-10
$startDt before +3 : 2018-08-10
$startDt after: 2018-08-13
【问题讨论】:
-
我将 dateTime(在变量 $startDt 中)复制到一个新变量 ($date),因此它不受任何更改的影响。 - 不幸的是,它不是这样工作的.当你像这样复制一个对象变量时,你所做的就是创建另一个指向同一个对象的指针。如果您想要一个完全独立的对象实例,请使用
clone,或者您也可以使用DateTimeImmutable类。 -
似乎您所做的只是增加天数?因此,当您添加 2 时,它将上升到第 10 位,然后将 3 增加到第 10 位将使其成为第 13 位