컴퓨터잡담

PHP 시간관련 함수

by 디케 posted Aug 06, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

PHP 시간관련 함수


가끔씩 쓰는데 외우기는 싫은 함수.

맨날 찾아보다가 이젠 귀찮아서 스크랩 해 놓는다. ㅋㅋㅋ


시간 관련함수들에 대해서 한번 이야기 해볼까합니다. 
아마 게시판뿐만 아니라.. PHP를 다룰때.. 시간을 다뤄야 하는 경우가 무지하게 많을겁니다. 
뭐든 잘다루면 좋쵸..^^ 

꼭 필요한 함수들만 설명하도록 하겠습니다. 

time() 

현재 시간을 타임스탬프값으로 받아옵니다. 
여기서 타임스탬프라는건.. 1970년인가.. 여튼.. 뭐 옛날 어느한날을 기준으로잡고 
그 후로 흐른시간을 초로 환산한 시간이래여.. --;; 
왜 이런걸 생각해냈는지는 모르겠지만.. 여튼 잘한일 같아요..^_^ 사용하기 편하거든요.. 

첨에는 좀 어색한것 같아도.. 나중에 자주 다루다 보면.. 이게 젤로 편해요.. 

현재 시간을 얻고싶다!! 

$now=time(); 

끝!! 

무지하게 간단하죠?? 
그럼 이걸 만약에 출력하거나 디비에 저장한다면.. 어떻게 보일까요?? 

제 홈페이지에 마지막으로 가입하신분(현재기준)의 타임스탬프값이 
1029569828 으로 나오네요..^^ 

여튼.. 이렇게 저장이 됩니다. 
그렇다면 이렇게 디비에 저장된걸.. 불러와서는 어떻게 "년-월-일" 이런식으로 출력할까요? 

바로 date()라는 함수를 사용합니다. 
사용방법은 이러합니다. 

date("출력하고싶은 형태",값); 

좀전에 $now=time(); 라고 현시간을 저장했죠?? 
그럼 이걸 "2002-8-17" 로 출력하고싶다면 

echo date("Y-m-d",$now); 요렇게 하시면 됩니다..^^ 쉽죠?? 

여기서 Y가 년도, m이 달, d가 날짜죠.. 
date함수에서 사용하는 인수에 대해서 함 알아볼까요?? 


a : 'am' , 'pm' 을 나타냅니다. 
A : 'AM' , 'PM' 을 나타냅니다. 
d : 날짜를 2자리로 출력함 (01, 02, 03, .. ) 
j : 날짜를 한자리로 출력함 ( 0은 제외하고 1, 2, 3 .. ) [참고로 소문자 "제이" 임] 
F : 달을 영문으로 나타냄 (January, February.. ) 
m : 달을 숫자로 표시 (01, 02, 03..) 
M : 달을 영문으로 나타내지만.. 3자리로 나타냄 (Jan, Feb) 
t : 주어진 달의 마지막 날짜를 나타냄 ( 28 ~ 31 ) 
h : 시간 (12시간 기준 11, 12, 1, 2, ...) 
H 시간 (24시간 기준 11, 12, 13, 14...) 
i : 분(숫자로 표시) 
s : 초(숫자로 표시) 
S : 영어 서수 (th, nd) 
I : 요일의 긴표시 (sunday, monday..) 
D : 요일(짧은영문으로 표기 sun, mon,..) 
Y : 4자리 연도 (2001, 2002) 
y : 2자리 연도 


뭐 이정도를 사용할수가 있답니다..^^ 
마지막 예를 한번 보여드릴게요.. 
현재시간을 2002년 8월 17일 5시 11분 24초 이렇게 표기할려면 
date("Y년 m월 d일 H시 i분 s초",$now); 요렇게 하면 된답니다..^^ 

사실 이두가지만 확실히 알고있어도 웬만한건 다 할수가 있답니다..^^ 

그래도 자주 사용되는 두가지 함수를 더 설명할게요.. 

mktime() 함수입니다. 

이것도 역시 타임스탬프값을 얻어오는겁니다. 
근데.. time()은 현재시간을 타임스탬프값으로 바꾸는거고 

mktime()은 원하는 시간을 정한다음 그 시간을 타임스탬프값으로 만드는거죠.. 
아마 제생각에 mktime에서 mk는 make가 아닐까 싶네요..^__^ 
사용법은 역시 아래를 보시면 됩니다. 

mktime(시간, 분, 초, 월, 일, 년); 

이렇게 사용하는겁니다. 이건 언제 많이 사용하냐면.. 
어제, 오늘, 그리고 내일을 정확하게 구분할때 사용을 한답니다. 

즉, 오늘은 2002년 8월 17일 12시 땡 하면서 시작이 됐죠?? 
그럼 mktime(0,0,0,8,17,2002); 라고 하면 아마 되겠죠?? 
그럼 내일이 되기 1초전은? mktime(23,59,59,8,17,2002); 이렇게 하면.. 
오늘의 마지막 순간이 되겠죠?? ^^ 

이걸 어디다가 응용하냐구요?? 
많쵸... 예를 들어.. 카운터.. 
정확하게 오늘 온사람의 수를 구해야 할때.. 

또는 정확하게 오늘 가입한사람.. 등등등.. 
이렇게 이용하시면 됩니다.. 쉽죠??? 헤헤.. ^^ 


마지막으로 microtime 

이건뭐냐.. 하면 타임스탬프값을 마이크로초로 만드는겁니다.. 
마이크로초가 왜 필요하냐구요?? 

사실 별 쓸모없죠.. 

근데 간혹.. 쿼리 시간재볼때.. 이걸 사용한답니다.. 

쿼리 또는 소스 읽는 시간은 초단위로 재면.. 거의 99% 0초로 나옵니다. 
1초안에 모든게 끝나기 때문에..^^ 

그럴때 마이크로초로 구하는거죠.. 

소스의 가장첫부분에.. 

$start = microtime(); 

이라고 시작시간을 잽니다.. 

그리고 소스가 끝나는 부분에 

$end = microtime() - $start; 

라고 하면.. 소스가 실행되는동안의 마이크로초를 구할수 있겠죠? ^^ 
이렇게 사용하는거랍니다. 


그외에도.. 몇가지 시간함수가 더 있는데.. 
사실 저도 잘 모르고.. 이 4개만 잘 알아도.. 충분하다고 확신합니다..^^