strtotime()

Language/PHP 2010. 7. 26. 14:03

strtotime 함수...

문자열 형태의 날짜를 입력받아 UNIX timestamp 값을 돌려주는 함수다.

미국인들은 쉽게 쓸 수 있지만, 우리나라와는 날짜 표현 방법이 틀리기 때문에

약간 헷갈릴 소지가 있다. 그래서 정리해 봤다.

 

time()     1104151691
strtotime("now")     1104073200     //위와 같이 now는 php 5.0, 5.2에서 오작동 함.

strtotime("1972-09-24")     86108400
strtotime("72-9-24")     86108400
strtotime("72-09-24")     86108400
strtotime("9/24/72")     86108400
strtotime("24 September 1972")     86108400
strtotime("24 Sept 72")     86108400
strtotime("24 Sep 72")     86108400
strtotime("Sep 24, 1972")     86108400
strtotime("24-sep-72")     86108400
strtotime("24sep72")     86108400

strtotime("20:02")     1104145320
strtotime("8:02pm")     1104145320

strtotime("last day")     1103986800
strtotime("26-dec-2004")     1103986800
strtotime("next day")     1104246000
strtotime("next monday")     1104678000
date("Y-m-d H:i:s", strtotime("last day"))     2004-12-26 00:00:00

strtotime("1 year")     1135609200
strtotime("1 year ago")     1072450800
strtotime("3 years")     1198681200
strtotime("2 days")     1104246000
strtotime("tomorrow")     1104159600
strtotime("1 days")     1104159600
strtotime("yesterday")     1103986800
strtotime("-1 days")     1103986800
strtotime("1 days ago")     1103986800

strtotime("20041227")     1104073200

 

---------------------------------------------------------------------------------------------------------------

 

$time = time();
echo date("Y-m-d",strtotime("-1 day", $time))." 하루 전(어제)<br>";
echo date("Y-m-d",strtotime("now", $time))." 현재<br>";
echo date("Y-m-d",strtotime("+1 day", $time))." 하루 후(내일)<br>";
echo date("Y-m-d",strtotime("+1 week", $time))." 일주일 후<br>";
echo date("Y-m-d",strtotime("-1 month", $time))." 한달 전<br>";
echo date("Y-m-d",strtotime("+1 month", $time))." 다음달<br>";
echo date("Y-m-d",strtotime("+6 month", $time))." 6달후<br>";
echo date("Y-m-d",strtotime("+12 month", $time))." 12달후<br>";
echo date("Y-m-d",strtotime("next Thursday", $time))." 다음주 목요일<br>";
echo date("Y-m-d",strtotime("last Monday", $time))." 지난 월요일<br>";
echo date("Y-m-d",strtotime("10 September 2000", $time))." 2000년 9월 10일 <br>";

 

-----------------------------------------------------------------------------------------------------

 

문제)

strtotime() 함수를 이용하면 하루전 한달 뒤 등을  손쉽게 구할 수 있습니다.
그런데 오늘 즉 31일에 문제점이 발생하네요.

print date("Y년 m월",strtotime("-1 month"));

위와 같이 해서 출력 하면...
공교롭게도... 2005년 09월이 아닌 2005년 10월이 출력됩니다.
그건 아마도 30일에 해당되는 날짜 만큼만 빼서 발생하는 문제인것 같습니다.


해결)

위의 경우엔 strtotime()함수보다는
date("Y년 m월",mktime(0,0,0,date("m")-1,15,date("Y")));
가 가장 적당해 보입니다.
혹시 더 좋은 방법 있으면 ^^;

위에서 1이 아니고 15로 한거는 2월달을 생각해서 입니다.

 

ex)

if (Date("d") == "31") {
  if (date('m')-1 == "12") {
    $이전조사월 = Date("Ym",mktime(0,0,0,date('m')-1,15,date('Y')-1));
    $이전조사월영어 = Date("F",mktime(0,0,0,date('m')-1,15,date('Y')-1));
  }
  else {
    $이전조사월 = Date("Ym",mktime(0,0,0,date('m')-1,15,date('Y')));
    $이전조사월영어 = Date("F",mktime(0,0,0,date('m')-1,15,date('Y')));
  }
  if (date('m')-2 <= "12" && date('m')-2 >= "11") {
    $이전전조사월 = Date("Ym",mktime(0,0,0,date('m')-2,15,date('Y')-2));
    $이전전조사월영어 = Date("F",mktime(0,0,0,date('m')-2,15,date('Y')-2));
  }
  else {
    $이전전조사월 = Date("Ym",mktime(0,0,0,date('m')-2,15,date('Y')));
    $이전전조사월영어 = Date("F",mktime(0,0,0,date('m')-2,15,date('Y')));
  }
}
else {
  $이전전조사월 = Date("Ym",strtotime("-2 month()"));
  $이전전조사월영어 = Date("F",strtotime("-2 month()"));

  $이전조사월 = Date("Ym",strtotime("-1 month()"));
  $이전조사월영어 = Date("F",strtotime("-1 month()"));
}


[출처] strtotime() 함수|작성자 센스남

'Language > PHP' 카테고리의 다른 글

Warning: main(): URL file-access is disabled in the server  (0) 2010.08.01
정규표현식  (0) 2010.07.27
php xml parser  (0) 2010.07.21
자바스크립트 변수를 php변수로 넘기기  (0) 2010.07.20
HTTP_REFERER  (0) 2010.07.16
: