我有一个特定的日期 - 例如说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');
当我指定静态值时,代码可以正常工作。
任何建议或见解都将不胜感激。
谢谢
答案 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,这将继续。