2013. 11. 18.

PHP 오늘 어제 내일 날짜 구하기 date() mktime() time() 함수.

PHP에서 특정 날짜를 구하는 데는 date()와 mktime() 함수만 알고 있으면 걱정 없습니다. date() 함수는 2가지의 인수를 가집니다. 첫 번째 인수는 시간을 어떻게 출력할 것 인가에 대한 포맷입니다.
년도만 출력할 수 도 있고, 현재 시간만 출력 할 수도 있습니다. date("Y") 는 현재 년도를, date("G")는 현재 시간을(0 - 23시간) 출력해 줍니다.

그럼 기준이 되는 시간은 무엇일까 하는 생각이 듭니다. 두 번째 인수가 기준이 되는 시간 입니다. 두 번째 인수는 넣어도 되고 넣지 않아도 됩니다. 없을 경우 time() 함수의 결과 값이 기본 값으로 들어 갑니다. time()함수는 1970년 1월 1일부터 지금 이 순간 까지 경과한 시간을 초로 반환해 주는 함수 입니다.

date("Ymd") 라고 하면 오늘 날짜를 구할 수 있겠네요. 결과는 20131118 입니다. 두 번째 인수가 안 들어 갔으니 기본 값으로 현재 시간이 들어가는 거구요. 결국 date()는 특정 시간을 어떤 형태로 출력해 주는지 정해 주는 녀석인 것 같습니다.
http://php.net/manual/kr/function.date.php

그럼 어제와 내일 날짜를 구하기 위해선 두 번째 인수를 계산해서 넣어줘야 됩니다. mktime()은 1970년 1월 1일부터 특정 날짜까지 경과한 초를 반환해 줍니다. 인수 없이 mktime()을 호출하면 time()을 호출한 것과 결과가 같습니다.

mktime(시간, 분, 초, 달, 일, 년, is_dst) 의 형식을 가집니다. 마지막 인수는 시간대와 관련된 인수인 듯 합니다 만, PHP5.1 부터 더 이상 사용을 권장하지 않는다고 합니다. mktime() 함수의 인수들은 어떻게 넣느냐. 각 자리마다 구하고 싶은 값들을 넣으면 됩니다. 시간은 0부터 23까지. 분과 초는 0부터 59까지...
http://php.net/manual/en/function.mktime.php

이 함수는 똘똘 합니다. 만약 분을 60이라고 넣으면 알아서 시간 값을 1 올리고 분은 1이 됩니다. 달과 일의 경우도 말일이 28일, 29일, 30일, 31일의 경우가 있는데, 해당 년도와 해당 달을 참고해서 알아서 처리해 줍니다. 구글링을 통해서 찾아 볼 수 있는 PHP관련 날짜 함수는 이런 성질을 이용해서 작성 되어 있습니다.

이제 아래 코드가 한 눈에 들어오리라 생각 합니다.
date("Ymd", mktime(0,0,0, date("m"), date("d")-1, date("Y"))); //어제
date("Ymd", mktime(0,0,0, date("m"), date("d")+1, date("Y"))); //내일
위 코드에서 날짜 포맷 부분을 date("Ymd H:i:s", ... ); 시분초가 나오게 해보면 00:00:00이 나옵니다. mktime()의 1~3 인수를 0으로 줬기 때문인데요. date() 함수를 이용해서 시분초에 해당하는 값을 넣어주면 됩니다.

시분초를 포함한 최종 코드는 아래와 같습니다.
date("Ymd H:i:s", mktime(date("H"), date("i"), date("s"), 
                         date("m"), date("d")-1, date("Y")));
date("Ymd H:i:s", mktime(date("H"), date("i"), date("s"), 
                         date("m"), date("d")+1, date("Y")));

* 특정 날짜에서 전날, 다음날을 구하고 싶다? 날짜 형식은 20131118 이라고 가정. 다른 거 없이 날짜를 쪼개서 적당하게 넣어 주기만 하면 됩니다. 구분자가 포함됐으면 없애버리고 처리하면 되겠죠.
function get_yesterday( $day ){

    $y = substr( $day, 0, 4 );
    $m = substr( $day, 4, 2 );
    $d = substr( $day, 6, 2 );

    return date("Ymd", mktime(0,0,0, $m, $d-1, $y));
}
날짜 구하기. 간단하고 편하네요 :D

댓글 1개 :

  1. 설명글은 무슨말인지 하나도 모르겠습니다.
    허나 코드를 보니 이해가 확 됩니다.
    코드 잘 참고하겠습니다.

    답글삭제