2012. 10. 31. 12:54ㆍDevelopment/Tip
PHP의 strtotime을 이용하여 이전 달, 다음 달 등의 월 정보를 가져오는 로직을 사용하다가 발견한 이슈입니다.
현재 날짜: 2012-10-31
echo date('Y-m-d', strotitme('-1 month'));
기대결과: 2012-09-30
실제결과: 2012-10-01
echo date('Y-m-d', strotitme('+1 month'));
기대결과: 2012-11-30
실제결과: 2012-12-01
이는 기준 일자보다 추출 대상의 일자가 적을때 +-1 day가 추가적으로 계산되면서 발생됩니다.
php 공식사이트 이슈리포트에 보면 많은 이들이 이슈제기를 했지만,
버그가 아니기때문에 다른 방법으로 사용하라고 명시하고 있더군요.
그래서 저는 다음과 같은 커스텀 펑션을 하나 만들어서 우회 사용하고 있습니다.
/**
* php strtotime month 사용과 관련한 이슈 우회처리
* @param sTime string date/time string
* @param iTime int unixtimestamp
*/
function strtotimeMonth($sTime, $iTime=null)
{
if (is_null($iTime) === TRUE || is_int($iTime) === FALSE) {
$iTime = time();
}
$sTransDay = date('d', $iTime);
$sLastDay = date('t', $iTime);
if ($sTransDay == $sLastDay) {
$iResTime = strtotime('last day of ' . $sTime, $iTime);
} else {
$iResTime = strtotime($sTime, $iTime);
}
return $iResTime;
}
'Development > Tip' 카테고리의 다른 글
Lets Encrypt 인증서, 발행서버와 서비스서버를 별도로 구성하는 방법 (35) | 2017.01.14 |
---|---|
http, https 프로토콜에 따른 이미지출력결과 테스트 (2) | 2012.06.11 |
싸이월드 다이어리를 백업해주는 CyDiary Copyer (24) | 2012.06.04 |
안드로이드폰용 크롬에서 개발자도구 사용 (2) | 2012.05.15 |
안드로이드 웹브라우저의 elements 터치 버그 (2) | 2012.04.30 |
윈도우용 tail (0) | 2012.04.04 |