PHP와 MySQL에서 주차표기시 주의점

PHP와 MySQL에서 날짜 제어하는데

이번엔 주차 관련 표시를 해야함

 

문제는... PHP든 MySQL이든 기본적으로 월별 주차는 지원 안되네.

그래서 해결법은 .. 그냥 포기했어, 월별 주차 안쓸꺼야.

OK 해결됬어. 

 

월별 주차 대신에 년별 주차를 쓰게 됨.

 

 

PHP에서 주차는

https://www.php.net/manual/en/datetime.format.php

월요일 시작하는 주차임. ISO-8601 규정에 따른다네.

W  ISO-8601 week number of year, weeks starting on Monday  Example: 42 (the 42nd week in the year)

그런데 좀 더 보면

o  ISO-8601 week-numbering year. This has the same value as Y, except that if the ISO week number (W) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0)  Examples: 1999 or 2003

이게 튀여나옴

ISO-8601 이잖아? 즉, 똑같은 규칙을 쓰는데

o는 년도를 나태냄, 즉, 주차용 년도야.

주차의 문제가 월~일까지의 범위가 1개의 주차를 의미하기에 이게... 작년이나 내년의 년도와 겹칠 수 있음

그래서 주차의 년도를 표기하려면 o를 써야함. 안그러면 년초,년말에 이상한 년도가 다르게 보일 수 있음.

즉, 

echo date("o년 W주차");

 처럼 됨

 

이제 MySQL의 쿼리 쪽도 똑같네 값이 나오게 해야함

MySQL은 %U, %u, %V , %v 를 지원함

%U  Week (00..53), where Sunday is the first day of the week; WEEK() mode 0

%u  Week (00..53), where Monday is the first day of the week; WEEK() mode 1

%V  Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X

%v  Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x

차이는 일요인 부터인가? 월요일 부터인가 차이고 

%X와 %x가 부록으로 또 따라옴

%X,%x는 주차의 연도를 표기하는 것임

즉, PHP와 같게 맞출려면

select date_format(now(),'%x년 %v주차');

처럼 해주면 됨

 

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📅 달력형