bool date_default_timezone_set ( string $timezone_identifier ) (PHP 5 >= 5.1.0)

 

date_default_timezone_set 함수로 국가별 시간을 구할 수 있습니다. timezon db는 링크에서 받으세요.

 

 <?php

 

// 결과 2013/02/19 16:16:33
echo gmdate("Y/m/d H:i:s"date_timezone_set("US/Samoa"));


function 
date_timezone_db($country)
{
    
$fp is_file('./timezone.db.txt');
    
clearstatcache();
    
    if(
$fp)
    {
        
$resource 
          explode
("\n"file_get_contents("./timezone.db.txt"));
        foreach(
$resource as $v)
        {
            
$timezone explode(" "$v);
            if(
$timezone[0] == $country)
            {
                return 
$timezone[1];
            }
        }
        return 
false;
    }
    else
    {
        return 
false;
    }
}

function 
date_timezone_set($country)

     // php 5.1 이상이라면....
    if(
function_exists("date_default_timezone_set") &&
     
function_exists("date_default_timezone_get")){
        
date_default_timezone_set($country);
        
$timezone = array();
        
$timezone explode(" "date("Y m d H i s"));
        return 
gmmktime(
         
$timezone[3], $timezone[4], $timezone[5],
         
$timezone[1], $timezone[2], $timezone[0]
        );
    }
    else
    { 

        // php 5.1 이하라면....
        
$timezone date_timezone_db($country);
        if(
$timezone !== false)
        {
            return (
time() + 3600*$timezone);
        }
        else
        {
            return 
false;
        }
    }
}
?>

 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

array getdate ([ int $timestamp= time() ] ) (PHP 4, PHP 5)

timestamp에 주어진 날짜 정보로 연관 배열을 반환하고, timestamp인자를 생략할 경우 현재 시간을 기본값으로 합니다. 반환값은 다음 표와 같습니다.

 배열 키  설명  예시
 seconds
 초의 숫자 표현
 0 부터 59
 minutes
 분의 숫자 표현
 0 부터 59
 hours
 시간의 숫자 표현
 0 부터 23
 mday
 일의 숫자 표현
 1 부터 31
 wday
 요일의 숫자 표현
 0 (일요일) 부터 6 (토요일)
 mon
 월의 숫자 표현
 1 부터 12
 year
 연도의 숫자표현, 4 자리
 예시: 1999 또는 2003
 yday
 연도의 일차
 0 부터 365
 weekday
 요일, 완전한 문자
 Sunday 부터 Saturday
 month
 월, 완전한 문자, January 나 March
 January 부터 December
 0  1970 1 1부터 timestamp에 주어진 날짜까지의  

예제 (ex #1
 <?php
 
// 현재 시간: 2011-05-18 pm 09:02
 
$today getdate
(); 
 
print_r($today
);

 
/*
 결과:
 Array
 (
    [seconds] => 18
    [minutes] => 2
    [hours] => 21
    [mday] => 18
    [wday] => 3
    [mon] => 5
    [year] => 2011
    [yday] => 137
    [weekday] => Wednesday
    [month] => May
    [0] => 1305720138
 )
 */
 
?>

다음은 mktime과 time의 비교입니다. time함수는 정확한 년/월/일 날짜에 접근성이 떨어지는 반면, mktime함수는 날짜의 접근정도가 편리합니다.

예제 (ex #2

 <?php
 
// 예정 시간: 2011-05-19 pm 09:13를 구하고자 합니다.

 
echo "<pre>"
;
 
$time getdate(time()+86400
); 
 
print_r($time
);

 
/*
 결과:
 Array
 (
    [seconds] => 39
    [minutes] => 13
    [hours] => 21
    [mday] => 19
    [wday] => 4
    [mon] => 5
    [year] => 2011
    [yday] => 138
    [weekday] => Thursday
    [month] => May
    [0] => 1305807219
 )
 */


 // 시, 분, 초, 월, 일, 년 순입니다.
 
$mktime getdate(mktime(21,13,0,5,19,2011
));
 
print_r($mktime
);

 
/*
 결과:
 Array
 (
    [seconds] => 0
    [minutes] => 13
    [hours] => 21
    [mday] => 19
    [wday] => 4
    [mon] => 5
    [year] => 2011
    [yday] => 138
    [weekday] => Thursday
    [month] => May
    [0] => 1305807180
 )
 */
 
?>


예제 (ex #3
 <?php
 $gettime 
getdate(time
());
 echo 
"현재 시각 " $gettime['year'] ."년 " .$gettime['mon'] . "월 " .
$gettime['mday'] . 
"일은 " $gettime['weekday'] . "입니다.";

 
// 결과: 현재 시각 2011년 5월 18일은 Wednesday입니다. 
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요


int mktime ([ int $hour= date("H") [, int $minute= date("i") [, int $second= date("s") [, int $month= date("n") [, int $day= date("j") [, int $year= date("Y") [, int $is_dst= -1 ]]]]]]] ) (PHP 4, PHP 5)

이 함수는 얻고 싶은 날짜를 인자로 전달하여 그 날짜에 해당하는 타임 스탬프값을 얻을 수 있습니다. 이는 gmmktime함수와 같은 기능을 합니다. 차이가 있다면, gmmktime함수는 그리니치 표준시간을 기준으로 한다는 점입니다.

그리니치 표준시간이란? 경도 0도의 그리니치 자오선을 기준으로 한 시간으로 세계 모든 지방의 시간과 관측에 사용하는 표준시의 기본이 됩니다. 우리나라 표준시와는 9시간 정도 차이가 있습니다.

예제 (ex #1
 <?php
 
// 현제시간 2011/05/17 pm 10:48분입니다.
 // 인자를 지정하지 않으면, 1970년 1월 1일 부터 계산된 현재의 시간을 초로 계산합니다.

 
echo mktime(); 
// 결과: 1305640138 

 
echo time(); 
// 결과: 1305640138 

 
echo gmmktime(); 
// 결과: 1305640138
 
?>

여기서 gmmktime함수와는 차이를 보이지는 않지만, 다음 예제를 보면 결과 값이 다르다는 것을 알 수 있습니다. 그리니치 표준시간으로 9시간 정도 차이가 있으니 같을 수는 없지요.

예제 (ex #2
 <?php
 
echo mktime(000111997); 
// 결과: 852044400  

 
echo gmmktime(000111997); 
// 결과: 852076800
 
?>

gmmktime, mktime은 시, 분, 초, 월, 일, 년 으로 인자를 넘겨 주면 됩니다.

예제 (ex #3
 <?php
 
// 32일은 존재하지 않기 때문에 1998년 1월 1일로 계산되어 집니다.
 
echo date("M-d-Y"mktime(00012321997
));
 
// 결과: Jan-01-1998

 // 13월은 존재하지 않기 때문에 1998년 1월 1일로 계산되어 집니다.
 
echo date("M-d-Y"mktime(0001311997
));
 
// 결과: Jan-01-1998

 
echo date("M-d-Y"mktime(000111998
));
 
// 결과: Jan-01-1998

 // 98은 98년, 11은 2011년 등 두 자리로 년도를 지정할 수 있습니다.
 
echo date("M-d-Y"mktime(0001198
));
 
// 결과: Jan-01-1998

 
echo date("M-d-Y"mktime(0001111
));
 
// 결과: Jan-01-2011
 
?>

예제 (ex #4
 <?php
 
echo date("M-d-Y"gmmktime(00051811
));
 
// 결과: May-18-2011

 
echo date("M-d-Y"mktime(00051811
));
 
// 결과: May-18-2011

 // 60초 * 60분 * 24시간 = 86400 (1일)
 
echo date("M-d-Y"time()+86400
);
 
// 결과: May-18-2011
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

단순히 달력만 출력하는 소스입니다.

 <?php
 $year 
2011
;
 
$month 5
;
 list(
$tday$dday) = split('[ ]',
        
date('t w',mktime(0,0,1,$month,1,$year
)));
 
?>

 현재 <?=$year?>년 <?=$month?>월 입니다.
 <table width='400' border=1 cellspacing=0 cellpadding=0>
 <tr>
 <td>일<td>월<td>화<td>수<td>목<td>금<td>토
 <tr>

 
<?php
 $col 
0
;
 
$vtd "<td>&nbsp;\n"
;

 for(
$i 0$i $dday$i
++){
      echo 
$vtd
;
      
$col
++;
 }

 for(
$i 1$i <= $tday$i
++){
      echo 
"<td>${i}\n"
;
      
$col
++;

      if((
$col == 7) && ($col !== $tday
)){
           echo 
"<tr>\n"
;
           
$col 0
;
      }
 }

 while(
$col && $col 7
){
      echo 
$vtd
;
      
$col
++;
 }
 
?>
 </table>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

string date ( string $format [, int $timestamp ] ) (PHP 4, PHP 5)

포맷(format) 문자열에 다음 표의 값으로 대입할 경우 형식화된 현제의 로컬 시간을 반환받거나, 선택적인 timestamp에 대입하여 원하는 날짜나 시간을 얻을 수 있습니다. 즉, 선택적인 timestamp 인자가 주어지지 않았을 경우, 현재 시간을 기본값으로 가지는 유닉스 타임스탬프로 기본값은 time() 값을 갖습니다.

다음 표의 문자들을 format 인수 문자열로 인식합니다.

 포맷  의미  예시
 일 (Day)
 d 일, 앞에 0이 붙는 2 숫자 01 ~ 31(일)
 D 요일 글자 표현, 3 문자 Mon ~ Sun
 j 앞에 0이 붙지 않는 일 1 ~ 31(일)
 l 요일의 완전한 글자 표현 Sunday ~ Saturday
 N 요일의 ISO-8601 숫자 표현 (PHP 5.1.0에서 추가) 1(월요일) ~ 7(일요일)
 S 일 영어 접미사, 2 문자 st, nd, rd, th. J 형식
 w 요일 숫자 표현 0(일요일) ~ 6(토요일)
 z 해당 연도 일차 (0에서 시작) 0 ~ 365
 주 (week)
 W ISO-8601 주차, 주는 월요일에 시작 42; 그 해의 42번째 주
 
 월 (Month)
 F January나 March 같은 월의 완전한 글자 표현 January ~ December
 m 0이 붙는 월 숫자 표현 01 ~ 12
 M 월의 축약 글자 표현, 3 문자 Jan ~ Dec
 n 0이 붙지 않는 월 숫자 표현 1 ~ 12
 t 주어진 월의 일 수 28 ~ 31
 
 연 (Year)
 L 윤년 여부  윤년이면 1, 아니면 0
 o ISO-8601 연도. Y와 같지만, ISO 주차(W)가 전해나 다음해에 해당하면, 그 연도를 사용합니다. (PHP 5.1.0에서 추가)  1999나 2003
 Y 연도의 완전한 숫자 표현, 4 숫자  1999나 2003
 y 연도의 두 숫자 표현  99나 03
 시간 (Time)
 a 오전과 오후의 소문자 am 또는 pm
 A 오전과 오후의 대문자 AM 또는 PM
 B 스와치 인터넷 시간 000 ~ 999
 g 0이 붙지 않는 12시간 형식 시 1 ~ 12
 G 0이 붙지 않는 24시간 형식 시 0 ~ 23
 h 0이 붙는 12시간 형식 시 01 ~ 12
 H 0이 붙는 24시간 형식 시 00 ~ 23
 i 0이 붙는 분 00 ~ 59
 s 초, 0이 붙음 00 ~ 59
 u 마이크로초 (PHP 5.2.2에서 추가) 예시: 54321
 시간대 (Timezone)
 e 시간대 식별자 (PHP 5.1.0에서 추가) 예시: UTC, GMT, Atlantic/Azores
 I 일광 절약 시간 여부 일광 절약 시간이면 1, 아니면 0
 O 그리니치 시간(GMT)과 시차  +0200
 P 시와 분 사이에 콜론이 들어가는 시간(GMT)과 차이  +02:00
 T 시간대 축약어  EST, MDT ...
 Z 시간대 오프셋 초. UTC 서쪽은 항상 음수, UTC 동쪽은 항상 양수 -43200 ~ 50400
 날짜/시간 표현 (Full date/Time)
 c ISO 8601 날짜 (PHP 5에서 추가) 2004-02-12T15:19:21+00:00
 r » RFC 2822 형식 날짜
예시: Thu, 21 Dec 2000 16:01:07 +0200
 U January 1 1970 00:00:00 GMT 부터 초수 timestamp 형식

포맷문자열로 어떤 결과가 나오는지 아래 예제로 확인해 보겠습니다.

일(Day) 포맷형식

예제 (ex #1

 <?php
 
// 오늘은 2011년 5월 6일 금요일(Friday) 입니다.

 // 일, 앞에 0이 붙는 2 숫자
 
echo date('d'); 
// 결과: 06

 
echo "<br />"
;
 
// 요일 글자 표현, 3 문자 출력
 // Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
 
echo date('D'); 
// 결과: Fri

 
echo "<br />"
;
 
// 앞에 0이 붙지 않는 일
 
echo date('j'); 
// 결과: 6

 
echo "<br />"
;
 
// 영문인 요일의 완전한 글자 표현
 // Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
 
echo date('l'); 
// 결과: Friday

 
echo "<br />"
;
 
// 요일의 ISO-8601 숫자 표현 
 // 1->월, 2->화, 3->수, 4->목, 5->금, 6->토, 7->일
 
echo date('N'); 
// 결과: 5

 
echo "<br />"
;
 
// 요일 숫자 표현
 
echo date('w'); 
// 결과: 5

 
echo "<br />"
;
 
// 365일 중 오늘은 125일째입니다.
 
echo date('z'); 
// 결과: 125
 
?>

주(Week) 포맷형식

예제 (ex #2

 <?php
 
// 오늘은 2011년 5월 6일 금요일(Friday) 입니다.

 // 1월 부터 오늘까지 18주가 흘렀습니다.
 
echo date('W'); 
// 결과: 18
 
?>


월(Month) 포맷형식

예제 (ex #3

 <?php
 
// 1월->January, 2월->February, 3월->March, 4월->April, 5월->May, 6월->June
 // 7월->July, 8월->August, 9월->September, 10월->October, 11월->November, 12월->December
 // 오늘은 2011년 5월 6일 금요일(Friday) 입니다.

 // 월의 완전한 글자 표현
 
echo date('F'); 
// 결과: May

 
echo "<br />"
;
 
// 0이 붙는 월 숫자 표현
 
echo date('m'); 
// 결과: 05

 
echo "<br />"
;
 
// 월의 영문 첫 3문자
 
echo date('M'); 
// 결과: May

 
echo "<br />"
;
 
// 0이 붙지 않는 월 숫자 표현
 
echo date('n'); 
// 결과: 5

 
echo "<br />"
;
 
// 이 달 마지막 일 수, 5월은 31일까지임
 
echo date('t'); 
// 결과: 31
 
?>


년(Year) 포맷형식

예제 (ex #4

  <?php
 
// 오늘은 2011년 5월 6일 금요일(Friday) 입니다.

 // 윤년이면 1를, 아니면 0인 값
 
echo date('L'); 
// 결과: 0

 
echo "<br />"
;
 
// 연도의 완전한 숫자 표현, 4 숫자
 
echo date('Y'); 
// 결과: 2011

 
echo "<br />"
;
 
// 연도의 끝 두 숫자 표현
 // o 문자 포맷과 같음
 
echo date('y'); 
// 결과: 11
 
?>

시간(Time) 포맷형식

예제 (ex #5

 <?php
 
// 오늘은 2011년 5월 6일 금요일(Friday) PM 11시 입니다.

 
echo date('a'); 
// 결과: pm

 
echo "<br />"
;
 echo 
date('A'); 
// 결과: PM

 
echo "<br />"
;
 
// 시차없이 24시간을 1000개(비트)로 나눈 시간; 스위스기준: 자정은 '@0', 정오는 '@500' 비트시로 표시
 
echo date('B'); 
// 결과: 660

 
echo "<br />"
;
 
// 0이 붙지 않는 12시간 형식 시
 
echo date('g'); 
// 결과: 11

 
echo "<br />"
;
 
// 0이 붙지 않는 24시간 형식 시
 
echo date('G'); 
// 결과: 23

 
echo "<br />"
;
 
// 0이 붙는 12시간 형식 시
 
echo date('h'); 
// 결과: 11

 
echo "<br />"
;
 
// 0이 붙는 24시간 형식 시
 
echo date('H'); 
// 결과: 23

 
echo "<br />"
;
 
// 0이 붙는 분, 현제 시각 23시 50분 입니다.
 
echo date('i'); 
// 결과: 50

 
echo "<br />"

 
// 초, 0이 붙음, 현제 시각 23시 50분 1초 입니다.
 
echo date('s'); 
// 결과: 01

 
echo "<br />"
;
 
// 마이크로 초입니다.
 
echo date('u'); 
// 결과: 000000 
 
?>

시간대(Timezone) 포맷형식

예제 (ex #6

  <?php
 
echo date('e'); 
// 결과: Asia/Tokyo
 
?>

날짜/시간(Full date/Time) 포맷형식

예제 (ex #7
 <?php
 
// 형식: 요일. 일 월 년 시:분:초+GMT
 
echo date('r'); 
// 결과: Sat, 14 May 2011 00:04:52 +0900

 // 형식: 년-월-일 시:분:초+GMT
 
echo date('c'); 
// 결과: 2011-05-14T00:08:40+09:00

 // 1970년 1월 1일로부터 2011년 5월 14일까지 1305299536초가 경과된 시간
 
echo date('U'); 
// 결과: 1305299536
 
?>

포맷 문자열에 일반 문자를 넣거나 포맷 문자열을 역슬레쉬(\)로 일반 문자로 인식되게 할 수 도 있습니다.
다음 예제가 이해에 도움이 되리라 봅니다.

예제 (ex #10

 <?php
 
echo date("Y-m-d"); 
// 결과: 2011-05-14

 
echo "<br />"
;
 echo 
date('H:i:m'); 
// 결과: 00:22:05

 
echo "<br />"
;
 echo 
date('현제 시각은 H시 i분 m초',time()); 
// 결과: 현제 시각은 00시 22 분 05초

 
echo "<br />"
;
 echo 
date('오늘은 y년 m월 d일 입니다. \Y-\m'); 
// 결과: 오늘은 11년 05월 14일 입니다. \Y-\m
 
?>

timestamp

int time ( void ) (PHP 4, PHP 5)

timestamp와 datetime의 차이는 다음 표와 같습니다.

 timestamp 1970년 01월 01일 00:00:00 ~ 2037년 12월 31일 23:59:59 까지
 datetime 1000년 01월 01일 00:00:00 ~ 9999년 12월 31일 23:59:59 까지

이 함수는 1970년 1월 1일부터 현제까지 경과된 시간을 초로 반환받습니다.

예제 (ex #11
 <?php
 
// 오늘은 2011년 5월 14일 9시 52분
 
echo time(); 
// 결과: 1305334269

 // timestamp와 동일한 기능을 하며, PHP 5.1부터 사용가능합니다.
 
echo $_SERVER['REQUEST_TIME']; 
// 결과: 1305334269
 
?>

예제 (ex #12
 <?php
 
// 현제 2011년 5월 14일입니다.

 // 7일*24시간*60분*60초
 
$nextWeek time() + (24 60 60
);

 echo 
'오늘은    'date('Y-m-d') ."입니다.<br />\n"
;
 
// 결과: 오늘은 2011-05-14입니다.

 
echo '다음주는 'date('Y-m-d'$nextWeek) ."입니다.<br />\n"
;
 
// 결과: 다음주는 2011-05-21입니다.

 
echo '다음주는 'date('Y-m-d'strtotime('+1 week')) ."입니다.<br />\n"
;
 
// 결과: 다음주는 2011-05-21입니다.
 
?>

예제 (ex #13
 <?php
 
// 3일*24시간*60분*60초
 
$eventTime time() + (24 60 60
);

 if(
time() > $eventTime
){
      echo 
"이벤트 종료되었습니다."
;
 }else{
      echo 
"이벤트 진행중입니다."
;
 }
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

bool checkdate ( int $month , int $day , int $year ) (PHP 4, PHP 5)

이 함수는 인자로 구성된 날짜의 유효성을 체크하며, 해당 날짜가 타당하면 true를, 아니면 false를 반환합니다.

 인자  의미
 month  1~12월까지 입력합니다.
 day  주어진 month 에서 허용된 일 수. 윤년도 고려됩니다.
 year  1에서 32767까지 년도를 입력합니다.

다음 예제를 살펴보면 이해되리라 봅니다.

예제 (ex #1

 <?php
 
// 2011년 4월 31일 유효성 체크
 
if(checkdate(4312011
)){
      echo 
"31일은 실제 존재합니다."
;
 } else {
      echo 
"31일은 존재하지 않습니다."
;
 }

 
// 결과: 31일은 존재하지 않습니다.


 // 2011년 5월 31일 유효성 체크
 
if(checkdate(5312011
)){
      echo 
"31일은 실제 존재합니다."
;
 } else {
      echo 
"31일은 존재하지 않습니다."
;
 }
 
// 결과: 31일은 실제 존재합니다.

 
?>


이 함수를 이용하면, 해당 월이 총 몇 일인지를 알 수 있습니다.

예제 (ex #2

 <?php
 $year 
2011
;
 
$month 4
;
 
$day 1
;
 while(
true === checkdate($month$day$year
)){
      
$day
++;
 }

 
$day $day 1
;
 echo 
"${year}년 ${month}월은 ${day}일까지 입니다."
;

 
// 결과: 2011년 4월은 30일까지 입니다. 




 
$day 1
;
 while(
true === checkdate(date("m"), $daydate("Y"
))){
      
$day
++;
 }
 
$day $day 1
;
 echo 
"${year}년 ${month}월은 ${day}일까지 입니다."
;

 
// 결과: 2011년 4월은 30일까지 입니다. 
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요