기획자의 개발이야기

PHP, 주차로 기간검색 하기

Written by vonzone

요즘 myhabit 이라는 습관관리 어플리케이션을 PHP(CODEIGNITER)로 개발하고 있다.

간략하게 설명하자면 사용자는 자신이 원하는 습관을 등록하고 이것을 1주일 단위로 관리하는 어플리케이션이다. 예를들면, 영어공부를 2시간씩 일주일에 3번하는 습관을 기르고자 한다면 이것을 습관으로 등록하고 영어공부를 한 번씩 할 때마다 체크를 하여 나중에 이에 대한 통계(목표달성률)를 보는 웹어플리케이션이다. 그러면 사용자는 자신이 언제 영어공부를 열심히 했고 언제 열심히 안 했는지 알 수 있으며 영어공부에 대한 자신의 현재 상황도 항상 체크를 할 수 있기 때문에 좋은 습관을 기르는데 도움이 될 수 있을 것이다.

 

아무튼 이 어플리케이션은 습관을 주간단위로 관리를 하기 때문에 아래와 같은 주단위의 기간검색이 필요하다. 만약 아래처럼 검색을 한다면 2015년 3월 2째주의 월요일(From)부터 2015년 4월 3째주의 일요일(To)에 해당하는 데이터를 불러오면 된다. 기간검색

그런데 생각해보니 이게 그렇게 간단하진 않다.  2015년 3월 2째주의 월요일이 몇일인지 한 번에 알려줄 함수도 없을 뿐더러(물론 내가 모르는 것일 수도 있다.) 주차를 계산할 때는 목요일을 기준으로 계산해야 한다는 조건도 있기 때문이다. 예를들어, 1월 1일이 목요일이면 1월1일은 1월의 첫번째 주가 되지만 만약 1월 1일이 금요일이면 1월 1일은 작년 12월의 마지막 주가 된다. 그래서 주를 계산하기 위한 방법에 대해 서치를 좀 했으나 내가 원하는 답을 찾기 어려웠다. 그래서 혹시나 나와 같은 초보자들을 위해 내가 해결한 간단한(?) 방법을 공유하고자 한다.

2015년 1월

 

 

————–해결방법(아래와 같은 방법으로 선택한 주의 날짜를 계산했다.)———————-

3월 2째주의 월요일을 알기 위해서는 2월 28일의 요일을(전 달 마지막 날의 요일) 먼저 확인한다. 그리고 2월 28일의 요일이 수요일보다 크면 ‘2월 28일이 속한 주’는 2월의 마지막주이므로 ‘2월 28일이 속한 주’의 월요일부터 2주 뒤의 날짜가 3월 2째주의 월요일이 된다.

반대로 2월 28일의 요일이(전 달 마지막 날의 요일) 수요일보다 같거나 작으면 ‘2월 28일이 속한 주’는 3월의 첫째주이므로 ‘2월 28일이 속한 주’의 월요일부터 1주 뒤의 날짜가 3월 2째주의 월요일이 된다.

if (date(‘N’, 2월 28일) >3) {

3월 2째주의 날짜 = 2월 28일이 속한 주의 월요일  + (7 *(3월의 구하려는 주 ));

}

if(date(‘N’, 2월 28일) =<3) {

3월 2째주의 날짜 = 2월 28일이 속한 주의 월요일 + (7 *(3월의 구하려는 주 – 1));

}

 

 

—————코드는 아래와 같다.———————————————

*참고로 나는 개발자가 아닌 기획자다. 그래서 코드가 허접하다는 것을 참고하기 바란다.

만약 아래 코드를 이용하여 2015년 3월 2째 ~ 2015년 4월 3째주에 대한 기간검색을 한다면 2015-03-09 00:00:00(월요일) ~ 2015-04-19 23:59:00(일요일) 의 결과를 얻을 수 있을 것이다.

 

 

About the author

vonzone

소프트웨어인라이프에서 서비스 기획을 하고 있습니다. 평범한 사람임에도 불구하고 특별한 일을 해내고자 합니다.

%d 블로거가 이것을 좋아합니다: