2013-04-17 82 views

回答

0

据我所知,没有任何选项可以更改开始日期。所以,你可以检查当天是星期天,如果是,则增加周数与1:

function getIsoWeeksInYear($year) { 
    $date = new DateTime; 
    $date->setISODate($year, 53); 
    return ($date->format("W") === "53" ? 53 : 52); 
} 

function getWeek($date) { 
    $week = date('W',strtotime($date)); 
    $day = date('N',strtotime($date)); 
    $max_weeks = getIsoWeeksInYear(date('Y',strtotime($date))); 

    if($day == 7 && $week != $max_weeks) { 
     return ++$week; 
    } elseif($day == 7) { 
     return 1; 
    } else { 
     return $week; 
    } 
} 

echo getWeek('2012-12-30'); 
+2

不完全。请记住,ISO 8601星期数字范围从1 - 53 *包括*。例如,2010年1月3日的星期日是ISO 2009年,ISO第53周。[“如果1月1日是星期一,星期二,星期三或星期四,则在第01周。如果1月1日是星期五,星期六或星期天,它在上一年的第52或53周(没有00周)。12月28日总是在其一年的最后一周。“](http://en.wikipedia.org/wiki/ISO_8601# Week_dates) – user113215

+0

感谢您的评论:+1。上周我不确定。然后将其更改为53。 – enenen

+2

并非所有的ISO年份都有53周。周数是* 52或53,取决于各种因素。请参阅[ISO周日期](http://en.wikipedia.org/wiki/ISO_week_date)。简而言之,12月28日的测试应该会发现一年中的最高周数(52或53)。 – user113215

0

最优雅的解决方案是简单地一整天加1后,输入:

$todays_week = date('W', strtotime($date) + 60 * 60 * 24); 

唯一不适用的情况是12月31日它是星期天。在这种情况下,答案将不正确地说出1.你必须检查这个。

相关问题