안녕하세요. 명월입니다.
이 글은 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에서 날짜와 시간을 다루는 방법에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Development note > PHP' 카테고리의 다른 글
[PHP] FTP를 접속하여 파일을 업로드, 다운로드, FTP 초기화하는 방법 (0) | 2020.02.20 |
---|---|
[PHP] cmd (커맨드 명령어)를 실행하는 방법 (0) | 2020.01.14 |
[PHP] cURL(HttpConnection)을 이용해서 Naver와 Daum의 실시간 API를 가져오는 방법 (0) | 2019.11.26 |
[PHP] 암복호화 함수 md5와 base64 (0) | 2019.11.13 |
[PHP] Socket통신을 하는 방법 (1) | 2019.11.10 |
[PHP] 직렬화(Serializable) (0) | 2019.11.09 |
[PHP] PHP와 JSP 간의 Session 공유(WDDX) (2) | 2019.11.08 |
[PHP] PHP에서 파일을 압축 또는 해제하는 방법 (0) | 2019.11.07 |