【问题标题】:DateTime Modify() php affecting previous variable [duplicate]DateTime Modify() php 影响以前的变量 [重复]
【发布时间】: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 位

标签: php datetime variables


【解决方案1】:

$startDt 分配给$date 时,值不会被复制而是被引用。您需要将对象显式复制到另一个变量中:

# referenced
$date = $startDt;

# copied
$date = clone $startDt;

【讨论】:

  • 我明白了!感谢保罗的帮助:)
猜你喜欢
  • 2023-04-01
  • 2014-07-24
  • 2013-08-14
  • 2017-11-29
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 2013-11-25
  • 2017-07-25
相关资源
最近更新 更多