문제
2.2.7
역주 (calendar week)
역년 중의 서수에 의하여 지정되는 특정한 7일의 기간으로 월요일부터 시작된다.
2.2.10
역주 수 (calendar week number)
처음 역주의 법칙에 따르면, 역년 내, 역주를 나타내는 서수는 일 년의 첫 번째 목요일을 포함하는 수이다. 역년의 마지막 역주는 다음 역년의 첫 번째 역주 바로 이전의 주이다.
3.2.2 역주
- 1역년에 52 또는 53 역주가 있도록 한다.
- 예)
- 1995년 01월 01일은 1994년 52번째 주의 7번째 날이다.
- 1996년 12월 31일은 1997년 첫 번째 주의 2번째 날이다.
주차 계산 함수
function getWeek($date)
{
$now_day = date('N', strtotime($date)); // 입력 날짜가 무슨 요일인지
$date = $this->getWeekDate($date);
list($yy, $mm, $dd) = explode('-', $date);
$week = ceil((($dd - $now_day + 1) - 1) / 7) + 1; // 주차 구하기
return $yy . '년 ' . $mm . '월 ' . $week . '주 차';
}
function getWeekDate($date)
{
list($yy, $mm, $dd) = explode('-', $date);
$criteria_day = 4; // 목요일 기준
$last_dd = date('t', strtotime($date)); // 입력받은 달의 마지막 날
$first_day = date('N', strtotime($yy . '-' . $mm . '-1')); // 입력 날짜의 1일이 무슨 요일인지
$last_day = date('N', strtotime($yy . '-' . $mm . '-' . $last_dd)); // 입력 날짜의 마지막 날이 무슨 요일인지
if ($first_day > $criteria_day) {
$first_monday_dd = 7 - $first_day + 2; // 입력받은 달의 첫 월요일 날짜
if ($dd < $first_monday_dd) {
return date('Y-n-t', strtotime($date . ' - 1 month')); // 이전 달의 마지막 주를 계산하도록
}
}
if ($last_day < $criteria_day) {
$last_monday_dd = $last_dd - $last_day + 1; // 입력받은 달의 마지막 월요일 날짜
if ($dd >= $last_monday_dd) {
return date('Y-n-', strtotime($date . ' + 1 month')) . '1'; // 다음 달의 첫 주를 계산하도록
}
}
return $date;
}
사용
$today_week_text = getWeek(date('Y-m-d'));