2013-04-30 83 views
0

我想創建一個數組,從第一個月開始,最後結束。PHP DateInterval不適用於DateTime對象

$days = array(); 
$sdays = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y')); 
$d = new DateTime(); 
$d->modify('first day of this month'); 
for($i; $i<$sdays; $i++) 
{ 
    $days[(int)$d->format('W')][(int)$d->format('N')] = $d->format('Y-m-d'); 
    $d->add(new DateInterval('P1D')); 
} 
print_r($days); 
exit(); 

所以這很簡單。 但是結果看起來像DateInterval函數不能正常工作。

後市展望:

Array 
(
    [14] => Array // week 
     (
      [1] => 2013-04-01 
      [2] => 2013-04-02 
      [3] => 2013-04-03 
... 

現實:

Array 
(
    [14] => Array 
     (
      [1] => 2013-04-01 
     ) 
) 

埃,方法,你如何解決這個問題也很簡單,創造一個又一個的DateTime對象,修改的第一天,然後創建一個新的DateTime對象從第一天開始,然後您可以將DateInterval添加到它。

因此,我修改我的DateTime對象的$ d->修改沒有日期可以添加到它。但問題是爲什麼?我想了解這一點。

感謝您的回答。

REPAS

+0

對於PHP 5.4.5,你的腳本工作...'$ I = 0'是唯一的,我已經修復。並且'$ d-> add(new DateInterval('P1D'))'沒有任何東西。 [*** *** FIDDLE(http://phpfiddle.org/main/code/y79-sr8) – BlitZ 2013-04-30 10:50:24

回答

2

你總是使用相同的對象,它引用相同的數據。 你需要克隆它

<?php 
$days = array(); 
$sdays = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y')); 
$d = new DateTime(); 
$d->modify('first day of this month'); 

for($i = 0; $i<$sdays; $i++) 
{ 
    $v = clone $d; 
    $v->modify("+$i day"); 
    $days[(int)$v->format('W')][(int)$v->format('N')] = $v->format('Y-m-d'); 

} 
print_r($days);