2013-07-18 76 views
0

可以說我有$year$week包含一週的ISO 8601表示的變量。我想計算上一個和下一個星期。這是一年中大部分時間的簡單任務,因爲我只需增加或減少$week變量,但在兩年的邊界上,我需要檢查我們是否開始新的一年。如何找出下一個ISO 8601周?

我創造了這樣的事情:

public function nextweek($year, $week) 
{ 
    $maxweek = 0;//@TODO 
    if ($week + 1 == $maxweek) 
    { 
     $year++; 
     $week = 1; 
    } 
    else 
    { 
     $week++; 
    } 
    $nextweek = $year.'/'.$week; 
    return $nextweek; 
} 

有沒有完成,更好的解決方案或一個內置的功能呢?

+0

爲什麼不只是使用'$ year'和'$ week'來獲取內部日期,添加/減去7,然後使用'date()'獲取ISO周? –

回答

0

最後我找到了解決方案。

public function nextweek($year, $week) 
{ 
    $date = new DateTime; 
    $date->setISODate($year, ++$week); 
    if (!($date->format('W') == $week)) 
    { 
     $week = '01'; 
     ++$year; 
    } 
    return $year.'/'.$week; 
} 
0

或爲PHP < 5.2

function nextweek($year, $week) { 
    $nextWeek = strtotime($year.'W'.sprintf("%02d", $week)) + (7 * 24 * 60 * 60); 
    return date('Y/W', $nextWeek); 
} 

沒有與一年wrap..for nextweek(2013, 52)它打印2013/01問題。還沒有發現錯誤..更好地堅持與DateTime