본문
PHP에서 제공하는 날짜 및 시간과 관련된 함수는 다음과 같은 것들이 있다.
함수명 |
기 능 |
checkdate |
주어진 날짜 및 시간이 타당한지를 검사한다. |
date |
주어진 옵션에 따른 포맷으로 시간이나 날짜를 출력한다. |
strftime |
해당 locale을 기준으로 주어진 옵션에 따른 포맷으로 시간이나 날짜를 출력한다. |
mktime |
특정 날짜 및 시간에 해당하는 유닉스 시간(초 단위)을 얻는다. |
time |
현재의 시간에 해당하는 유닉스 시간을 얻는다. |
getdate |
날짜 및 시간 정보를 연관 배열의 형태로 얻는다. |
checkdate 함수
checkdate() 함수는 다음과 같이 정의된다.
int checkdateint month, int day, int year); 인자로 주어진 날짜가 타당한지를 검사하여 타당할 경우 true를 , 그렇지 않을 경우 false를 반환한다. |
예를 들어, 1999년 2월 30일 이라는 날짜는 실제로는 존재하지 않는다. 따라서 checkdate(2,30,1999)의 실행 결과는 false를 반환한다. 아래의 예제를 보자.
<?
$res = checkdate(2,29,2000); if($res) { echo("입력하신 날짜는 올바른 정보입니다."); } else { echo("입력하신 날짜는 올바르지 않은 정보입니다."); }
?>
|
[예제2.1] checkdate() 함수의 사용
[예제2.1]의 3행에서는 2000년 2월 29일에 대한 타당성 검사를 수행한다. 2000년 2월은 윤년으로서 29일까지 존재하므로 이 날짜는 실제로 존재하는 타당한 날짜이다. 따라서 3행의 결과는 true 이므로 그 결과 5행이 출력된다. 물론 checkdate() 함수는 윤년까지 고려한다는 얘기다.
checkdate() 함수를 이용하면 해당 월이 총 며칠인지를 쉽게 알 수 있다. 물론 2월을 제외하고 나머지 달의 총 일수는 정해져 있다. 다음의 [예제2.2]를 보자.
<?
function get_totaldays($year,$month) { $day = 1; while(checkdate($month,$day,$year)) { $day++; }
$day = $day - 1; return $day; }
$totalD = get_totaldays(2000,2); echo("2000년 2월은 ${totalD}일까지 있습니다.");
?>
|
[예제2.2] checkdate() 함수를 이용하여 해당 월의 일수 구하기
[예제2.2]의 3행에서 정의한 get_totaldays() 함수는 인자로 전해준 해당 연월의 총 일자를 계산한다. 즉, 1일부터 시작하여 while 구문으로 각 날짜에 대한 타당성 검사를 수행하면 9행에서처럼 해당 월의 마지막 날짜를 확인할 수 있다. 위 스크립트의 실행 결과 2000ss 2월의 마지막 날짜는 29일이라는 것을 알 수 있다.
2000년 2월은 29일까지 있습니다. |
date 함수
date() 함수의 정의는 다음과 같다.
string date(string format, int timestamp); 주어진 timestamp에 해당하는 시간을 지정한 형식(format)에 맞게 출력한다. 여기서 timestamp이라고 하는 것은 1970년 1월 1일을 기준으로 특정 시점까지 경과된 시간을 초 단위로 표시한 시간을 의미한다. 예를 들면, 1999년 1월 1일은 1970년 1월 1일로부터 915,116,400초가 경과된 시간이므로 1999년 1월 1일을 timestamp으로 표시하면 915,116,400이 되는 것이다. 반대로 timestamp값이 "915115400"인 것을 날짜로 환산하면 1999년 1월 1일이 되는데 포맷(format)을 어떻게 주느냐에 따라 1월을 January로 출력할 수도 있고 시간을 12시간제(AM,PM)나 24시간제로 출력하는 등 다양한 형태로 표현할 수 있다. |
date() 함수 호출시 지정할 수 있는 출력 포맷으로는 다음과 같은 종류가 있다.
출력 형식 |
기능 |
예 |
Y |
연도를 네 자리수로 출력한다. |
1999 |
y |
연도를 두 자리수로 출력한다. |
99 |
M |
월을 세 자리 영문자로 출력한다. |
Jan |
m |
월을 두 자리수로 출력한다. |
01-12 |
F |
월을 완전한 영문자로 출력한다. |
January |
d |
일자를 두 자리수로 출력한다. |
01-31 |
j |
일자를 출력하는데 10일 이하는 한 자리수로 출력한다. |
1-9,10-31 |
l |
완전한 영문자로 요일을 출력한다. |
Friday |
w |
요일을 한자리 숫자로 출력한다. |
일(0), 월(1), 화(2)... |
D |
세 자리수 영문자로 요일을 출력한다. |
Fri |
H |
시간을 24시간제로 출력한다. |
23 |
h |
시간을 12시간제(오전,오후)로 출력한다. |
11 |
a |
am 이나 pm 으로 출력한다. |
|
A |
AM 이나 PM 으로 출력한다. |
|
i |
분을 출력한다. |
|
s |
초를 출력한다. |
|
z |
그해의 몇 번째 일수인지를 출력한다. 이 값은 0부터 시작하므로 윤년이 아닌 경우의 12월 31일은 364(즉, 365일째)로 출력한다. |
|
아래의 예제를 보면 date() 함수의 쓰임새를 알 수 있을 것이다.
<? $res = mktime(23,15,23,1,21,1999); echo("timestamp으로 ${res}은 1999년 1월 21일 23시 15분 23초로 다음과 같이 출력할 수 있습니다.<p>");
$str = date('년도출력 - Y 또는 y', $res); echo("$str<br>");
$str = date('월출력 - M 또는 m 또는 F', $res); echo("$str<br>");
$str = date('일출력 - d 또는 j', $res); echo("$str<br>");
$str = date('요일출력 - l 또는 D 또는 w', $res); echo("$str<br>");
$str = date('시간출력 - H 또는 h', $res); echo("$str<br>");
$str = date('분출력 - i', $res); echo("$str<br>");
$str = date('초출력 - s', $res); echo("$str<br>");
$str = date('1999년의 몇일째 출력 - z', $res); echo("$str<p>");
$str = date("Y년 m월 d일 H시 i분 s초 입니다.",$res); echo("$str<br>");
$str = date("Y년 xx m월 d일 H시 i분 s초 입니다.",$res); echo("$str<br>");
$str = date("Y년 m월 d일 H시 i분 s초 입니다."); echo("$str"); ?>
|
[예제2.3] date() 함수를 이용한 날짜의 다양한 출력
[예제2.3]의 출력 결과는 다음과 같다.
timestamp으로 916928123은 1999년 1월 21일 23시 15분 23초로 다음과 같이 출력할 수 있습니다.
연도 출력 - 1999 또는 99 월출력 - Jan 또는 01 또는 January 일출력 - 21 또는 21 요일 출력 - Thursday 또는 Thu 또는 4 시간출력 - 23 또는 11 분출력 - 15 초출력 - 23 1999년의 몇일째 출력 -20
1999년 01월 21일 23시 15분 23초입니다. 1999년 xx 01월 21일 23시 15분 23초입니다. 1999년 10월 08일 03시 37분 33초입니다. |
[예제2.3]에서 보면 알 수 있듯이 date() 함수의 포맷으로 어떤 문자를 지정해 넘겨주느냐에 따라서 같은 날짜라도 다양하게 출력할 수 있다. 단 32행처럼 포맷 지정자가 아닌 문자(xx)를 지정했을 경우에는 해당 문자가 그대로 출력된다.
만일 date() 함수의 두 번째 인자(timestamp)를 지정해주지 않으면 디폴트로 현재 시간에 대한 timestamp 값이 인자로 전달된다.
strftime 함수
strftime() 함수의 정의는 다음과 같다.
string strftime(string format, int timestamp); strftime()함수는 date() 함수와 동일한 역할을 수행하여 함수 호출시에 지정해 준 format에 따라 날짜 정보를 출력한다. 그러나 date() 함수와는 다르게 setlocale() 함수로 지정해 준 locale의 언어로 결과를 출력할 수 있다. 예를 들면, setlocale() 함수로 ko를 locale로 설정하면 strftime() 함수를 호출하여 월명이나 요일명 등의 정보를 영어가 아닌 우리말로도 출력시킬수 있다. 반면에 fr로 설정하면 당연 프랑스어로 출력이된다. 그런 점을 제외하고는 date() 함수와 쓰임새가 거의 비슷하다고 보면 된다. date() 함수와 마찬가지로 timestamp을 생략하면 현재 시간의 timestamp 값이 인자로 전달된다. |
strftime() 함수에서 사용 가능한 format 옵션은 다음과 같다.
포맷옵션 |
기능 |
예 |
%Y |
연도를 네 자리수로 출력한다. |
1999 |
%y |
연도를 두 자리수로 출력한다. |
99 |
%B |
현재의 locale에 따른 월명을 완전한 이름으로 출력한다. |
|
%b |
현재의 locale에 따른 월명을 축약하여 출력한다. |
|
%d |
일자를 두 자리수로 출력한다. |
0-31 |
%a |
현재의 locale에 따른 요일명을 축약하여 출력한다. |
|
%A |
현재의 locale에 따른 요일명을 완전한 문자로 출력한다. |
|
%w |
요일명을 한 자리 숫자로 출력한다. |
일(0), 월(1), 화(2)... |
%H |
시간을 24시간제로 출력한다. |
23 |
%l |
시간을 12시간제(오전,오후)로 출력한다. |
11 |
%M |
분을 출력한다. |
|
%S |
초를 출력한다. |
|
%Z |
현재의 타임존(timezone)을 출력한다. |
|
%x |
핸개의 locale에 따른 날짜(월/일/년)를 출력한다. |
|
%X |
현재의 locale에 따른 시간(시/분/초)을 출력한다. |
|
%U |
올해 몇 번째 주가 지났는지를 출력한다. 첫 주의 첫 날로 첫 번째 일요일을 기준 시간으로 한다. |
|
%W |
올해 몇 번째 주가 지났는지를 출력한다. 첫 주의 첫 날로 첫 번째 월요일을 기준 시간으로 한다. |
|
다음의 예제를 보면 strftime() 함수의 쓰임새를 알 수 있다.
<?
$str = strftime("%Y 또는 %y"); echo("년도출력 - $str"); echo("<p>");
setlocale("LC_TIME","en"); $str = strftime("%B 또는 %b"); echo("월명출력 - $str"); echo("<br>");
setlocale("LC_TIME","ko"); $str = strftime("%B 또는 %b"); echo("월명출력 - $str"); echo("<br>");
setlocale("LC_TIME","fr"); $str = strftime("%B 또는 %b"); echo("월명출력 - $str"); echo("<p>");
$str = strftime("%d"); echo("일자출력 - $str"); echo("<p>");
setlocale("LC_TIME","en"); $str = strftime("%a 또는 %A 또는 %w"); echo("요일출력 - $str"); echo("<br>");
setlocale("LC_TIME","ko"); $str = strftime("%a 또는 %A 또는 %w"); echo("요일출력 - $str"); echo("<br>");
setlocale("LC_TIME","fr"); $str = strftime("%a 또는 %A 또는 %w"); echo("요일출력 - $str"); echo("<p>");
$str = strftime("%H 또는 %I"); echo("시간출력 - $str"); echo("<p>");
$str = strftime("%M"); echo("분출력 - $str"); echo("<p>");
$str = strftime("%S"); echo("초출력 - $str"); echo("<p>");
$str = strftime("%Z"); echo("timezone - $str"); echo("<p>");
$str = strftime("%x - %X"); echo("날짜 - 일자출력 - $str"); echo("<p>"); |
$str = strftime("%U"); echo("올해 지금까지 ${str}주가 지났습니다."); echo("<p>");
setlocale("LC_TIME","ko"); $str = strftime("%Y %B %d일 %A %H시 %M분 %S초"); echo("현재 날짜및 시간은 ${str} 입니다."); ?>
|
[예제2.4] strftime() 함수를 이용한 날짜의 다양한 출력
[예제2.4]를 보면 strftime() 함수의 호출시 두 번째 인자가 모두 생략되어 있으므로 현재 시간, 즉 [예제2.4]의 스크립트가 샐행되는 시점에서의 날짜 정보가 출력된다.
출력 약식을 확인할 수 있도록 필자가 특정 시점에서 실행시킨 결과를 보이면 아래와 같다. [예제2.4]의 코드를 보면 setlocale()함수로 서로 다른 locale을 설정하고 그때의 요일과 월명을 출력해보았다.
[예제2.4]의 7,12,17행을 보면 setlocale 함수로 각각 en,ko,fr의 값을 locale로 설정하였다. 즉, 이 말은 이렇게 locale을 설정하게 되면 각 locale에 해당하는 월명과 요일명의 출력이 가능하게 되는 것이다. en 은 영어, ko 는 한국어, fr 은 프랑스어로 각각의 언어에 해당하는 문자가 출력되는 것을 아래의 결과에서 확인할 수 있다. 이제 strftime() 함수와 date() 함수의 차이가 이해될 것이다.
연도 출력 - 1999 또는 99 월명출력 - October 도는 Oct 월명출력 - 10월 또는 10월 월명출력 - octobre 또는 oct.
일자출력 - 08
요일출력 - Fri 또는 Friday 또는 5 요일출력 - 금 또는 금요일 또는 5 요일출력 - ven. 또는 vendredi 또는 5
시간출력 - 04 또는 04
분출력 - 59
초출력 -28
timezone - 한국 표준시
날짜 - 일자출력 - 08/10/99 - 04:59:28
올해 지금까지 40주가 지났습니다.
현재 날짜 및 시간은 1999 10월 08일 금요일 04시 59분 28초입니다. |
mktime 함수
mktime() 함수는 다음과 같이 정의된다.
int mktime(int hour, int minute, int second, int month, int day, int year); 앞서 date() 함수를 설명할 때 유닉스 timestamp의 개념에 대해 설명했다. mktime() 함수는 말 그대로 timestamp 값을 얻어내는 기능을 한다. 함수 호출시에 timestamp 값을 알고자 하는 날짜를 전달하면 그 날짜에 해당하는 timestampo 값을 알 수 잇다. 만일 아무 인자도 없이 호출하면 현재의 시간이 인자로 전달된다. |
mktime() 함수의 쓰임새는 아래와 같다.
<?
$res = mktime(); echo("현재 시간의 timestamp값은 ${res}(초)입니다.<br>");
$res = mktime(0,0,0,1,1,1999); echo("1999년 1월 1일의 timestamp값은 ${res}(초)입니다.<br>");
?>
|
[예제2.5] mktime() 함수는 초 단위의 유닉스 시간을 알려준다.
[예제2.5]의 실행 결과는 다음과 같다.
관련링크
댓글목록
등록된 댓글이 없습니다.