PHP의 strftime() 함수는 로케일(locale) 설정에 따라 현지 시간과 날짜를 원하는 형식의 문자열로 변환해 주는 함수입니다. 타임스탬프가 지정되면 해당 시각을, 지정되지 않으면 현재 로컬 시간을 기준으로 포맷 문자열에 맞춰 결과를 반환합니다.
문법(Syntax)
strftime(format, timestamp)
매개변수(Parameters)
timestamp − 포맷팅할 날짜 및 시간을 나타내는 Unix 타임스탬프입니다.
format − 결과를 어떤 형식으로 반환할지 지정하는 포맷 문자열입니다. 아래 형식 지정자를 조합하여 사용합니다.
주요 형식 지정자
%a − 요일의 축약형 이름 (예: Mon)
%A − 요일의 전체 이름 (예: Monday)
%b − 월의 축약형 이름 (예: Oct)
%B − 월의 전체 이름 (예: October)
%c − 해당 로케일에서 선호하는 날짜 및 시간 표현
%C − 세기 숫자(연도를 100으로 나눈 값, 00~99)
%d − 일(01~31), 두 자리로 표시
%D − %m/%d/%y와 동일한 형식
%e − 일(1~31), 한 자리는 공백 없이 표시
%g − %G와 같지만 세기 정보가 제외된 두 자리 연도
%G − ISO 주 번호(%V 참고)에 해당하는 네 자리 연도
%h − %b와 동일 (월의 축약형 이름)
%H − 24시간제 기준 시(00~23)
%I − 12시간제 기준 시(01~12)
%j − 연중 몇 번째 날인지(001~366)
%m − 월(01~12)
%M − 분
%n − 줄바꿈(newline) 문자
%p − 주어진 시간에 따라 오전(am) 또는 오후(pm) 표시
%r − 오전/오후(a.m./p.m.) 표기법으로 된 시간
%R − 24시간 표기법으로 된 시간 (%H:%M)
%S − 초
%t − 탭(tab) 문자
%T − 현재 시간, %H:%M:%S와 동일
%u − 요일을 숫자로 표시(1~7), 월요일=1 ※ Sun Solaris에서는 일요일=1이므로 주의
%U − 올해의 몇 번째 주인지 표시하며, 첫 번째 일요일을 첫째 주의 시작으로 계산
%V − ISO 8601 기준 주 번호(01~53). 첫째 주는 당해 연도에 최소 4일이 포함된 주이며, 월요일이 한 주의 시작입니다.
%W − 올해의 몇 번째 주인지 표시하며, 첫 번째 월요일을 첫째 주의 시작으로 계산
%w − 요일을 십진수 숫자로 표시(0~6), 일요일=0
%x − 시간을 제외한 선호하는 날짜 표현
%X − 날짜를 제외한 선호하는 시간 표현
%y − 세기를 제외한 두 자리 연도(00~99)
%Y − 세기를 포함한 네 자리 연도
%Z 또는 %z − 시간대 이름 또는 축약형
%% − 리터럴 % 문자 자체를 출력
반환값(Return)
strftime() 함수는 지정된 포맷 문자열에 따라, 주어진 타임스탬프 또는 타임스탬프가 없을 경우 현재 로컬 시간을 포맷팅한 문자열을 반환합니다.
예제 1
다음은 setlocale()로 로케일을 설정한 후 strftime()을 사용하는 예제입니다.
<?php
setlocale(LC_TIME, 'en_US');
echo strftime("%b %d %Y %H:%M:%S", mktime(20, 0, 0, 10, 31, 2018)) . "\n";
?>
실행 결과
Oct 31 2018 20:00:00
예제 2
다른 형식 지정자를 활용한 예제입니다.
<?php
echo(strftime("%B %d %Y, %X %Z", mktime(20, 0, 0, 12, 31, 92)) . "<br>");
?>
실행 결과
December 31 1992, 20:00:00 UTC
참고 사항
strftime() 함수는 PHP 8.1부터 공식적으로 폐기(deprecated)되었습니다. 새로운 프로젝트에서는 대신 IntlDateFormatter(국제화 처리)나 date(), DateTime::format() 함수를 사용하는 것이 권장됩니다. 특히 다국어 서비스에서 로케일 기반 날짜 출력이 필요하다면 IntlDateFormatter가 더 안정적인 선택입니다.