任务如下:您需要将开始日期和结束日期写入数组。一定数量的元素可以具有相同的结束日期和开始日期(变量对此负责$condition)。一旦此类元素的数量等于$condition,下一个元素的开始日期就会移动$countDays。该变量$from最初存储对象DateTime- 初始参考点。
问题是我modify两次应用于对象,并且在这两种情况下对象都被更改。但是我需要这样做,在第一个条件下,写入日期超过一天的$data[$key]['end']对象,但对象本身不会改变。并且已经在第二个条件下,对象应该改变,并且已经在下一次迭代中,它应该相对于改变的对象添加。DateTime$duration$duration
在第一种情况下可以更换什么modify,以免改变对象$from?
$j = 0;
foreach ($array as $key => $value) {
$duration = self::getDuration($value);
if ($duration) {
$data[$key]['begin'] = $from;
$data[$key]['end'] = $from->modify('+' . $duration . ' day');
$j++;
if ($j >= $condition) {
$from->modify('+' . $countDays . ' day');
$j = 0;
}
}
}
您可以使用 DateTimeImmutable 而不是 DateTime
如果我理解正确,您可以在第一种情况下克隆$from对象。会有类似$cloneFrom = clone $from; (或者(clone $from)->modify(...) )在第二种情况下,使用原始的 $from。此外,为方便起见,您可以循环执行