【问题标题】:In php, how do I use an increment operator in combination with a variable without it performing an increment operation?在 php 中,如何在不执行增量操作的情况下将增量运算符与变量结合使用?
【发布时间】:2016-12-04 11:47:48
【问题描述】:

我有一个特定的日期 - 例如,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');

当我指定静态值时,代码会起作用。

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

谢谢

【问题讨论】:

  • 谢谢 Tejaswi 和 Trincot。你的解释都很有帮助

标签: php date dayofweek


【解决方案1】:

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

因此,实际上这使您的任务更简单,因为您每次只需添加 1 天:

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

【讨论】:

    【解决方案2】:

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

    你的线路是

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

    使用

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2014-08-11
      • 2020-05-14
      • 2017-01-11
      相关资源
      最近更新 更多