【发布时间】:2018-08-10 19:15:18
【问题描述】:
我真的不知道怎么问这个。
我在两个变量中保存了相同的日期。 然后我将 100 天添加到第二个变量。 但两者似乎都发生了变化。为什么会这样?
$begin = new DateTime("20180101");
$end = $begin;
$end = $end->add(new DateInterval('P100D'));
echo $begin->format('Y-m-d') . "<br>";
echo $end->format('Y-m-d');
结果是:
2018-04-11
2018-04-11
但我期待:
2018-01-01
2018-04-11
【问题讨论】:
-
add() 修改对象。它返回自身以用于链接目的,但您不是“获得新日期”,而是获得相同的日期对象,无论您指定的时间间隔有多长。
-
奇怪的是,当您创建
$end时,它实际上是指向$begin的指针。您需要克隆该对象。不过,我无法解释为什么它会这样工作。 -
@aynber 为什么“奇怪”?这就是变量赋值的工作原理。
-
您实际上不需要更进一步@aynber,这与例如:stdClass 的行为完全相同。如果您从它创建一个对象,设置一个属性,使用它等于另一个变量,然后更改此属性,它将完全一样。
-
我...实际上不同意这是一个重复的问题。他从未问过如何深度复制 DateTime 对象,他只是问为什么日期保持不变,即使在引用的主题中回答了这个问题,也不是他问的。
标签: php datetime datetime-format