2013-04-17 5 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 week date] (http://en.wikipedia.org/wiki/ISO_week_date)를 참조하십시오. 간단히 말해서, 12 월 28 일 시험은 해당 연도의 가장 높은 주 번호 (52 또는 53)를 찾아야합니다. – user113215

0

가장 우아한 해결책은 입력에 하루 종일 일을 추가하는 것입니다

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

이것이 작동하지 않는 유일한 경우는 12 월 31 일이며 일요일이기도합니다. 이 경우 대답은 1을 잘못 말하는 것입니다. 이것을 확인해야합니다.

관련 문제