2014-01-08 103 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; 
相关问题