PHP strtotime()의 문제
오늘 아침 사무실에 출근해서 작업 중인 쇼핑몰의 관리자 페이지에 접속을 했는데.. 이전 달을 표시하는 부분을 보고
깜짝 놀랐다. 오늘이 3월 31일이니까 이전 달이면 2월로 표시가 되어야 하는데 3월이 표시되고 있었기 때문이다. 헐~
그래서 급하게 문제를 해결해야 했기에 검색도 해보고 그랬는데.. PHP strtotime() 함수의 문제라고 생각이 되어졌다.
이전 달을 구할 때 strtotime(“-1 month”, time()); 이렇게 코드를 작성했는데.. 이게 날짜가 30일이나 31일때 문제가
발생했다. 오늘처럼 3월 31일일 때가 문제인데 2월 29일까지만 있기 때문에 해당 함수가 이상 동작을 하는 것이었다.
그래서 이 부분을 해결하려고 수없이 검색을 했는데.. 서버 PHP 환경이 맞지 않는지 검색된 방법으로는 해결이 되지
않아 약간의 꼼수를 생각한 것이 30일이나 31일 때 해당 월의 마지막 날을 비교해서 비교 타임을 변경하는 것이었다.
// 윤년 계산 부분이다. 4년에 한번꼴로 2월이 28일이 아닌 29일이 있다.
if( $yyyy%4 == 0 && $yyyy%100 != 0 || $yyyy%400 == 0 )
$endday[2] = 29; // 조건에 적합할 경우 28을 29로 변경
// 이전달, 다음달
$n = date(“n”);
$pn = $n – 1;
if($pn == 0) {
$pn = 12;
}
$nowend = $endday[$n];
$prevend = $endday[$pn];
if($nowend > $prevend) {
$now = time() – 86400 * abs($nowend – $prevend);
} else {
$now = time();
}
$prev_month = date(“Y-m-01”, strtotime(“-1 month”, $now));
$next_month = date(“Y-m-01”, strtotime(“+1 month”, $now));
이렇게 코드를 작성해서 일단 제대로 보이기는 하는데.. 아직은 좀 더 테스트를 해봐야 할 듯 하다. 에고~ 참 힘들다.