2010-01-04 101 views
1

我在這裏感到茫然。看起來好像我的代碼在2009年底整整一週都失蹤了,而且我嘗試過一些不同的事情。php日期/星期問題

我的基本函數獲取一週的開始和結束日期如下。鑑於每年,每週和每週的日期,它會給你一個日期。

function datefromweeknr($aYear, $aWeek, $aDay) 
    { 
     $Days=array('xx','ma','di','wo','do','vr','za','zo'); 
     //xx = Current Sun, ma = Mon ..... zo = Sun of the next Week 
     $DayOfWeek=array_search($aDay,$Days); //get day of week (1=Monday) 
     $DayOfWeekRef = date("w", mktime (0,0,0,1,4,$aYear)); //get day of week of January 4 (always week 1) 
     if ($DayOfWeekRef==0){ 
      $DayOfWeekRef=7; 
     } 
     $ResultDate=mktime(0,0,0,1,4,$aYear)+((($aWeek-1)*7+($DayOfWeek-$DayOfWeekRef))*86400); 
     return $ResultDate; 
    } 

似乎工作完全罰款,直到我意識到,我是2009年12月27日當週失蹤1月2日2010年

echo '<table border="1">'; 
for($i = 1; $i < 53; $i++){ 
    if($i < 10){ 
     $w = '0'.$i.'1'; 
    } 
    else{ 
     $w = $i.'1'; 
    } 
    echo '<tr><td>Week#'.$i.' </td><td> '.date("Y-m-d",datefromweeknr(2009,$i,"xx")).' </td><td> '.date("Y-m-d",datefromweeknr(2009, $i,"za")).'</td><td> Week = '.date("W: Y-m-d",strtotime("2009W$w")).' </td></tr>'; 

} 

echo '</table>'; 

看來今年的第52周在2009-12結束-26和新年的第一週從2010-01-03開始。我失去了整整一週,沒有布埃諾!

任何人都知道我做錯了什麼,或者可以指向一種提供一週數字和一年的傻瓜證明方式,讓我獲得該周的開始和結束日期,而不會在這個過程中失去任何日子?

回答

0

入住這裏: http://www.onlineconversion.com/day_week_number.htm 如果輸入2009年12月29日,所以看到美國和ISO /歐洲給予不同的週數(分別爲52和53)。 這可能與您的問題有關嗎?你的日期也符合哪個標準?

編輯: 從http://www.epochconverter.com/epoch/weeknumbers.php: 根據ISO-8601標準的星期數,星期從星期一開始。今年的第一週是包含當年第一個星期四的一週。在一年的最高週數或者是52或53

+0

我使用ISO 8601的計時應用。問題是今年有53周。現在如何弄清楚哪些年份有「閏周」!謝謝吉米 – mmundiff 2010-01-05 05:01:29

0

你的問題remainded我的錯誤評論我今天閱讀php.net的:

在PHP 5之前5.2.7,請求 給定發生的某個工作日 月份,其中該工作日是該月的第一天 將 錯誤地將一週添加到 返回的時間戳。這已經在5.2.7及更高版本中更正了 。

這是現在不值得,但我建議你用datetime調用來替換datefromweeknr中的計算。我很確定strtotime會修復你的計算錯誤。

所以,你可以使用類似:

strtotime('last Monday', $timestamp);