PHP의 gmstrftime() 함수는 로캘(locale) 설정에 따라 GMT/UTC 기준의 날짜와 시간을 지정된 형식으로 포맷팅하여 문자열로 반환합니다. 서버의 현지 시간을 기준으로 동작하는 strftime() 함수와 달리, gmstrftime()은 그리니치 평균시(GMT/UTC)를 기준으로 결과를 생성한다는 점이 핵심 차이입니다.
참고로 이 함수는 PHP 8.1.0부터 공식적으로 지원 중단(deprecated)되었으므로, 새로운 프로젝트에서는 IntlDateFormatter 클래스나 date() 함수 사용을 권장합니다.
문법
gmstrftime(format, timestamp)
매개변수
timestamp − 포맷팅할 날짜 및 시간을 나타내는 Unix 타임스탬프입니다. 생략하면 현재 시간이 사용됩니다.
format − 결과를 어떤 형식으로 반환할지 지정합니다:
%a − 요일 이름(축약형)
%A − 요일 이름(전체)
%b − 월 이름(축약형)
%B − 월 이름(전체)
%c − 해당 로캘이 선호하는 날짜 및 시간 표현
%C − 세기 숫자(연도를 100으로 나눈 값, 범위 00~99)
%d − 일(01~31)
%D − %m/%d/%y와 동일
%e − 일(1~31)
%g − %G와 같으나 세기는 제외
%G − ISO 주 번호(%V 참조)에 해당하는 4자리 연도
%h − %b와 동일
%H − 시간(24시간제, 00~23)
%I − 시간(12시간제, 01~12)
%j − 연중 경과 일수(001~366)
%m − 월(01~12)
%M − 분
%n − 줄바꿈 문자
%p − 주어진 시간값에 따라 am 또는 pm 표시
%r − 오전/오후 표기법의 시간
%R − 24시간 표기법의 시간
%S − 초
%t − 탭 문자
%T − 현재 시간(%H:%M:%S와 동일)
%u − 요일 숫자(1~7), 월요일=1. 주의: Sun Solaris에서는 일요일=1
%U − 올해의 주 번호(첫 번째 일요일을 첫째 주의 시작일로 계산)
%V − 올해의 ISO 8601 주 번호(01~53). 1주차는 당해 연도에 최소 4일이 포함된 첫 번째 주이며, 월요일을 주의 시작일로 합니다.
%W − 올해의 주 번호(첫 번째 월요일을 첫째 주의 시작일로 계산)
%w − 요일 숫자(십진수), 일요일=0
%x − 시간을 제외한 선호 날짜 표현
%X − 날짜를 제외한 선호 시간 표현
%y − 세기를 제외한 연도(범위 00~99)
%Y − 세기를 포함한 연도
%Z 또는 %z − 시간대 이름 또는 약어
%% − % 문자 자체
반환값
gmstrftime() 함수는 주어진 format 문자열에 따라 timestamp를 포맷팅한 문자열을 반환합니다. timestamp가 생략된 경우 현재 시간을 기준으로 결과를 생성합니다.
예제 1
다음은 strftime()과 gmstrftime()의 차이를 비교하는 예제입니다.
<?php
setlocale(LC_TIME, 'en_US');
echo strftime("%b %d %Y %H:%M:%S", mktime(20, 0, 0, 10, 20, 2017)) . "\n";
echo gmstrftime("%b %d %Y %H:%M:%S", mktime(20, 0, 0, 10, 20, 2017)) . "\n";
?>
출력 결과
Oct 20 2017 20:00:00
Oct 20 2017 20:00:00
예제 2
다음은 로캘 설정 변경에 따른 출력 차이를 보여주는 또 다른 예제입니다.
<?php
echo(gmstrftime("%B %d %Y, %X %Z",mktime(20,0,0,11,30,91))."<br>");
setlocale(LC_ALL,"hu_HU.UTF8");
echo(gmstrftime("%Y. %B %d. %A. %X %Z"));
?>
출력 결과
November 30 1991, 20:00:00 GMT
2018. October 11. Thursday. 05:13:18 GMT
위 예제에서 볼 수 있듯이 setlocale()로 로캘을 변경하면 월 이름과 요일 이름이 해당 언어의 형식으로 출력됩니다. 두 번째 예제에서는 헝가리어(hu_HU.UTF8) 로캘을 적용했음에도 영문으로 표시된 것은 서버 환경에 해당 로캘이 설치되어 있지 않기 때문일 수 있으며, 실제 운영 환경에서는 로캘 패키지 설치 여부를 확인해야 합니다.