2014-01-08 105 views
0

根據ISO標準,2013年第52周,當週週六開始時,開始2013-12-28並於2014-01-03結束(包括的)。PHP取得ISO開始日期不是星期一的日期的ISO週數

代碼:

echo date('Y-m-d', strtotime("2013-W52-6"));//prints 2013-12-28 

現在,我試圖找出使用PHP的倒數。如果我有2014-01-03的日期,如果星期六的星期開始,如何知道該日期的ISO週數?

+1

不能重新定義['ISO-8601' weeknumber(http://en.wikipedia.org/wiki/ISO-8601#Week_dates),它有一個很清楚的,明確的定義。您可以通過定義您自己的星期編號標準來給出一個日期_another_ weeknumber,它不是'ISO-8601',您將不得不決定是否要讓偏移向前時間,或通過查看原文中的定義來提供自定義規則。它應該走哪條路? – Wrikken

+1

星期六一週怎麼開始? –

+0

那麼從任何日期開始,你想要它的週數?我不明白爲什麼我的回答不起作用? –

回答

0

使用DateTime類:

  1. createFromFormat()基於字符串創建對象必須
  2. 然後格式( 'W')
-1
$date = "2013-12-28"; 
$date_array = explode("-", $date); 
$date = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]); 
$week_number = date('W', $date); 
echo $week_number; 

像這樣的東西。

+0

DateTime :: createFromFormat()比爆炸更優雅... –

+0

這太過分了。 date()和DateTime都可以處理Y-m-d格式的日期,而無需任何操作。 –

+0

我猜DateTime對象和createFromFormat只適用於PHP 5+(不是PHP 4)。 – raj

0
$date = "2013-12-28"; 
$dayofyear = date("z", $date); 

$week = floor($dayofyear/7) + 1; 

// I assume week starts with Monday (I think as ISO does?) 
// so only weeks that start on sunday will count as "week 0" instead of "week 1" 
// I could be wildly wrong, adjust according to your needs 
$first_day = date("w", date("Y", $date) . "-01-01"); 
if ($first_day == 6) 
    --$week; 

echo $week; 
相關問題