[PHP] 날짜와 시간을 다루는 방법


Development note/PHP  2019. 11. 11. 20:12

안녕하세요. 명월입니다.


이 글은 PHP에서 날짜와 시간을 다루는 방법에 대한 글입니다.


PHP에서 날짜와 시간을 다루는 것은 time함수와 date함수 strtotime함수와 mktime함수와 date_default_timezone_set함수만 알면 끝납니다.

간단하게 설명하면 time은 timestamp값을 출력 date함수는 시간을 문자로 표현하는 것이고 strtotime와 mktime함수는 문자 혹은 날짜를 받아 timstamp로 변환하는 함수이고 date_default_timezone_set는 date의 타임 존을 설정하는 함수 입니다.


date_default_timezone_set

링크 - https://www.php.net/manual/en/function.date-default-timezone-set.php

링크 - https://www.w3schools.com/php/php_ref_timezones.asp

<?php
  // UTC 시간 세팅
  date_default_timezone_set('UTC');
  var_dump(date("Y-m-d h:i:s A"));
  // 서울 시간 세팅
  date_default_timezone_set('Asia/Seoul');
  var_dump(date("Y-m-d h:i:s A"));

결과는 UTC보다는 한국 시간이 약 9시간 차이가 나네요.. 참고로 현재 시간은 아침 10시 5분입니다.


time

링크 - https://www.php.net/manual/en/function.time.php

<?php
  // time함수의 timestamp는 1당 1초의 의미이며, 시작은 1970년 1월 1일 0시 0분 0초부터의 계산 값이다.
  $time = time() - (60 * 60 * 24);
  // 60 * 60 * 24의 값, 즉 하루 치의 timestamp를 빼면 어제의 날짜가 된다.
  var_dump($time);
  date_default_timezone_set('UTC');
  var_dump(date("Y-m-d h:i:s A",$time));
  date_default_timezone_set('Asia/Seoul');
  var_dump(date("Y-m-d h:i:s A",$time));

strtotime

링크 - https://www.php.net/manual/en/function.strtotime.php

<?php
  date_default_timezone_set('Asia/Seoul');
  // 2019년 11월 11일 오전 10시를 문자열로 넣으면 timestamp형식으로 계산된다.
  $time = strtotime("2019/11/11 10:00:00 AM");
  var_dump($time);
  var_dump(date("Y-m-d h:i:s A",$time));

이 strtotime의 경우는 여러가지 형태의 값을 timestamp로 바꾸어 주는데 +1week라던가.. 등등의 방식이 있습니다.

일부러 프로그램을 어렵게 만들려고 하지 않는 이상은 현재 시간을 바꾸는 형식으로 쓰고 (60 + 60 * 24 * 7)을 더 하던가의 방식으로 사용하는 것이 좋을 듯 싶습니다.


mktime

링크 - https://www.php.net/manual/en/function.mktime.php

mktime은 strtotime과 비슷합니다만 strtotime는 문자열이라면 mktime은 각 년월일시간분초를 받아서 timestamp로 변화하는 것입니다. 정확성으로 따지면 이 함수가 더 정확도가 높겠네요.

<?php 
  date_default_timezone_set('Asia/Seoul');
  // 파라미터 순서를 주의해야 한다. (시간, 분, 초, 월, 일 , 년도)
  $time = mktime(10,0,0,11,11,2019);
  var_dump($time);
  var_dump(date("Y-m-d h:i:s A",$time));

date

링크 - https://www.php.net/manual/en/function.date.php

날짜 다루기에서 가장 중요한 함수이지 않을까 싶네요. timestamp값을 string형식의 사람이 보기 좋은 형태로 표현합니다.

포멧 설명 예제
d 일, 기본 형태는 두글자로 1에서 9일 사이는 01에서 09로 표현된다. 01~31
D 요일 Mon~Sun
j 일, 1에서 9일 사이에 앞에 0이 붙지 않는다. 1~31
l 요일, 완전한 표현 Sunday~Saturday
N 요일의 ISO-8601 숫자 표현 (PHP 5.1.0에서 추가) 1(월요일)에서 7(일요일) 1~7
S 일 영어 접미사, 2 문자 st, nd, rd, th. j와 같이 사용하기 좋음
w 요일 숫자 표현 0(일요일)에서 6(토요일) 0~6
z 해당 연도 일차 0~365
W ISO-8601 주차, 주는 월요일에 시작 (PHP 4.1.0에서 추가) 42 (그 해의 42번째 주)
F January나 March 같은 월의 완전한 글자 표현 January~December
m 0이 붙는 월 숫자 표현 01~12
M 월의 축약 글자 표현, 3 문자 Jan~Dec
n 0이 붙지 않는 월 숫자 표현 1~12
t 주어진 월의 일 수 28~31
L 윤년 여부 윤년엔 1, 그 외엔 0
o ISO-8601 연도. Y와 같지만, ISO 주차(W)가 전해나 다음해에 해당하면, 그 연도를 사용합니다. (PHP 5.1.0에서 추가) 2019
Y 연도의 완전한 숫자 표현, 4 숫자 2019
y 도의 두 숫자 표현 19
시간
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
v 마이크로초 (PHP 7.0.0에서 추가) u와 사용방법이 같음 654
Timezone
e 시간대 식별자 (PHP 5.1.0에서 추가) UTC, GMT, Atlantic/Azores
I (대문자 i) 일광 절약 시간 여부 일광 절약 시간이면 1, 아니면 0
O 그리니치 시간(GMT)과 시차 +0200
P 시와 분 사이에 콜론이 들어가는 그리니치 시간(GMT)과 차이 +02:00
T 시간대 축약어 EST, MDT
Z 시간대 오프셋 초. UTC 서쪽은 항상 음수, UTC 동쪽은 항상 양수 -43200~50400
완전한 날짜/시간 표현
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)부터 초수 1573437655
<?php
  date_default_timezone_set('Asia/Seoul');
  var_dump(date("Y-m-d h:i:s A",time()));

여기까지 PHP에서 날짜와 시간을 다루는 방법에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.