2012-04-21 34 views
-3

給出以下信息:PHP的日期功能:從weeknumber轉換回一個月

  • 年份:2012
  • Weeknumber:4
  • DAYNAME:TUE

我怎麼能轉換這個到2012-01-12(YYYY-MM-DD)使用PHP日期函數的有效日期?

感謝名單

+0

參見[DateTime對象(http://il.php.net/manual/en/book.datetime.php) – 2012-04-21 15:52:48

+0

請問你的鍵盤巴掌你,如果你查了一下PHP的文檔? – noli 2012-04-21 15:56:19

+0

星期編號是[ISO周](http://en.wikipedia.org/wiki/ISO_8601#Week_dates)? – salathe 2012-04-21 15:56:51

回答

3

DateTime類不能做到這一點,但功能strptime即可。

$d = strptime('TUE 4 2012', '%a %W %Y'); 
var_dump($d); 

即返回一個數組:基於0

array 
    'tm_sec' => int 0 
    'tm_min' => int 0 
    'tm_hour' => int 0 
    'tm_mday' => int 24 
    'tm_mon' => int 0 
    'tm_year' => int 112 
    'tm_wday' => int 2 
    'tm_yday' => int 23 
    'unparsed' => string '' (length=0) 

注意tm_year包含的年數自1900年以來和tm_month,不是基於1的。所以這代表2012-01-24,這是正確的。

+0

很好的答案..我不知道這個功能。所以我寫了一個腳本:D檢查出來...... – 2012-04-21 16:48:39

-4

使用此功能:

function get_date($year,$week,$day,$start_sunday=false){ 
    $day_array = array('Mon'=>1,'Tue'=>2,'Wed'=>3,'Thu'=>4,'Fri'=>5,'Sat'=>6,'Sun'=>($start_sunday?0:7)); 
    $month_array = array(31,($year%4==0?29:28),31,30,31,30,31,31,30,31,30,31); 
    $week *= 7; 
    $month = 1; 
    for($i=0;$i<count($month_array);$i++){ 
     if($week-$month_array[$i]<=0){ 
      break; 
     } 
     $week -= $month_array[$i]; 
     $month++; 
    } 
    $format = "$year $month $week"; 
    $date = date_create_from_format("Y m j",$format); 
    $date_num = date_format($date,"D"); 
    $curr = $day_array[ucfirst(strtolower($day))]-$day_array[$date_num]; 
    $got_date = strtotime("$curr ".($curr==1||$curr==-1?"day":"days"),strtotime(date_format($date,"Y-m-j"))); 

    return $got_date; 
} 

其中$start_sunday應該true如果本週sunday

$year是今年開始 $week是週數 $day短星期名iemon,週二,週三,....

這個函數會給你一個日期形式th給定的格式。

Enjoy............ 
+1

-1因爲它會讓我的眼睛受傷。並且有更多的規則來計算它是否是閏年。而不是使用內置函數來完成這項工作。 – PeeHaa 2012-04-22 00:45:44

+0

是的,我知道有更多的規則第100年:P – 2012-04-22 10:52:34