2016-07-29 33 views
0

我有一個特定的日期 - 對於這個例子說7月6日。它在2016年的第27周。 使用PHP 5.5.9我試圖返回在那一週發生的7個日期,使用以下函數:在php中,如何在不執行增量操作的情況下將增量運算符與變量組合使用?

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年7月4日7個順序日期2016年7月10日

列表相反,我收到日期如下: 2016年7月4日,2016- 07-05,2016-07-07,2016-07-10 2016-07-14 2016-07-19,2016-07-25

我相信下面的l ine是我的問題的來源:

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

當我指定靜態值時,代碼工作。

任何建議,或見解,將不勝感激。

謝謝

+0

謝謝Tejaswi和Trincot。 你的解釋是有幫助的 –

回答

0

在下面的行,而不是使用$,我只使用1

你行是

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

使用

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

其原因是,當您使用修改功能時,它會修改日期對象本身。所以如果最初的日期是2016年7月4日,通過使用修改(「+ $ i日」)[$ i = 1]它將2016-07-05但在下一步當您修改(「+ $我的日子「)[$ i = 2]它將從2016-07-05算起,並會給你2016-07-07,這將繼續。

3

modify方法真的修改$dto,所以你不一樣$dto值處理如前面迭代的下一個迭代。

所以,其實這使得你的工作更簡單,因爲你可以每次只加1天:

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