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

时间:2016-07-29 17:17:58

标签: php date dayofweek

我有一个特定的日期 - 例如说7月6日。它在2016年的第27周。 使用PHP 5.5.9我试图使用以下函数返回该周发生的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');

当我指定静态值时,代码可以正常工作。

任何建议或见解都将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:3)

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

所以,实际上这会让你的任务更简单,因为你每次只能加1天:

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

答案 1 :(得分:0)

在下面的行中,不使用$ 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,通过使用修改(“+ $ i天”)[$ i = 1],它将在2016-07-05,但是在下一步修改时(“+ $我的日期“)[$ i = 2]它将从2016-07-05算起,并将给你2016-07-07,这将继续。