在 php 中,如何在变量不执行增量运算的情况下将增量运算符与变量结合使用?

In php, how do I use an increment operator in combination with a variable without it performing an increment operation?

我有一个具体的日期 - 对于这个例子来说是 7 月 6 日。它属于 2016 年的第 27 周。 使用 PHP 5.5.9 我正在尝试 return 那一周发生的 7 个日期,使用以下函数:

function getStartAndEndDate($week, $year) {  
    $i=0;
    $dto = new DateTime();
    $ret[$i] = $dto->setISODate($year, $week)->format('Y-m-d');
    $i++;
    while ( $i < 7 ){
        $ret[$i] = $dto->modify('+' . $i .  ' days')->format('Y-m-d');
        $i++;
    }
    return $ret;
}

我期待从 2016-07-04 到 2016-07-10 的 7 个连续日期的列表

相反,我收到以下日期: 2016-07-04, 2016-07-05, 2016-07-07, 2016-07-10 2016-07-14 2016-07-19, 2016-07-25

我相信以下行是我的问题的根源:

$ret[$i] = $dto->modify('+' . $i .  ' days')->format('Y-m-d');

当我指定静态值时,代码有效。

如有任何建议或见解,我们将不胜感激。

谢谢

modify 方法实际上修改了 $dto,因此在下一次迭代中,您不会处理与上一次迭代相同的 $dto 值。

所以,实际上这让您的任务变得更简单,因为您每次只需添加 1 天:

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d');

在下面的行中,不使用 $i 而只使用 1。

你的线路是

$ret[$i] = $dto->modify('+' . $i .  ' days')->format('Y-m-d');

使用

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d');

原因是当您使用修改函数时,它会修改日期对象本身。因此,如果最初日期是 2016-07-04 ,通过使用 modify("+$i days") [$i=1] 它将 2016-07-05 但是当你在下一步中做 modify("+$ i days") [$i=2] 它将从 2016-07-05 开始计算,并给你 2016-07-07 并且这将继续。