2013-09-21 65 views
1

我需要從特定的ISO周開始週一至週五的日期數組。我似乎無法找到返回數組的內建方法。我使用DateTime類與setISODate方法如下:PHP來自ISO周的日期陣列

$bookingDate = new DateTime(); 
$bookingWeek = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W")); 
$bookingDates = array(); 
$mon = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 1); 
array_push($bookingDates, $mon); 
$tue = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 2); 
array_push($bookingDates, $tue); 
$wed = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 3); 
array_push($bookingDates, $wed); 
$thu = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 4); 
array_push($bookingDates, $thu); 
$fri = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 5); 
array_push($bookingDates, $fri); 
print_r($bookingDates); 

然而 - 日期的陣列的print_r返回每一天都當作是星期五!有沒有辦法達到我想要的?

+0

檢查我的答案在這裏【計算星期幾給予週數(HTTP的http://stackoverflow.com/a/17065451/212940 – vascowhite

+0

可能重複:// stackoverflow.com/questions/186431/calculating-days-of-week-given-a-week-number) – vascowhite

回答

1

您正在更改相同DateTime實例$bookingDate)並將其添加到數組。最後,陣列中的每個元素都指向相同的DateTime實例。它包含您最後設置的日期。那就是$fri

您需要不同的實例(取決於您的需要)或數組中的格式化字符串。

要創建不同的實例,請在每個$bookingDate->setISODate函數調用之前添加$bookingDate = new DateTime();。這會消耗很多或資源。

最好使用單個DateTime實例並對其進行迭代。

for($i=0;$i<7;$i++){ 
    $year = intval($bookingDate->format("Y")); 
    $week = intval($bookingDate->format("W")); 
    $bookingDate->setISODate($year, $week, $i+1); 
    $bookingDates[]=$bookingDate->format(DateTime::ISO8601); 
} 
print_r($bookingDates); 

輸出

Array 
(
    [0] => 2013-09-16T20:23:42+0600 
    [1] => 2013-09-17T20:23:42+0600 
    [2] => 2013-09-18T20:23:42+0600 
    [3] => 2013-09-19T20:23:42+0600 
    [4] => 2013-09-20T20:23:42+0600 
    [5] => 2013-09-21T20:23:42+0600 
    [6] => 2013-09-22T20:23:42+0600 
) 
+0

** string **的數組 - 它沒關係OP想要一個** DateTime **的數組你覺得呢?也許不是,但是這應該是一個很好的理由。 – davidkonrad

+0

@davidkonrad顯然可能有一個很好的理由。那就是爲什麼我展示瞭如何製作** DateTime **的數組。 –