새소식

PHP/PHP

php - 입력한 날짜가 한국 표준으로 몇 월 몇 주인지 계산하기

  • -

문제

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'));
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.