strptime() 함수란?
PHP의 strptime() 함수는 strftime() 함수로 생성된 날짜·시간 문자열을 해석(parse)하여 배열 형태로 반환하는 함수입니다. 파싱에 성공하면 날짜 정보가 담긴 배열을 반환하고, 실패하면 FALSE를 반환합니다.
참고: 이 함수는 운영체제 및 시스템 로케일(locale) 설정의 영향을 받으며, Windows 환경에서는 구현되어 있지 않습니다. 로케일에 독립적인 처리가 필요하다면 date_parse_from_format() 함수를 사용하는 것이 좋습니다.
반환 배열의 구성 요소
- tm_sec − 초 (0~61)
- tm_min − 분 (0~59)
- tm_hour − 시 (0~23)
- tm_mday − 일 (1~31)
- tm_mon − 1월 기준 경과 개월 수 (0~11)
- tm_year − 1900년 이후 경과 연도
- tm_wday − 일요일 기준 경과 요일 수 (0~6)
- tm_yday − 1월 1일 기준 경과 일수 (0~365)
- unparsed − 지정한 형식으로 인식되지 못한 나머지 문자열 (있는 경우)
문법(Syntax)
strptime(date, format)
매개변수(Parameters)
- date − 해석할 날짜·시간 문자열
- format − date 문자열에 적용된 형식으로, 아래의 형식 지정자들을 조합하여 작성합니다.
형식 지정자(Format Specifiers) 목록
- %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 − 줄바꿈(newline) 문자
- %p − 주어진 시간에 따라 오전(am) 또는 오후(pm)
- %r − 오전/오후 표기법으로 표시한 시간
- %R − 24시간 표기법으로 표시한 시간
- %S − 초
- %t − 탭(tab) 문자
- %T − 현재 시간, %H:%M:%S와 동일
- %u − 요일을 숫자로 표현 (1~7), 월요일=1 ※ 단, Sun Solaris에서는 일요일=1
- %U − 올해의 주 번호, 첫 번째 일요일을 첫 주의 시작으로 계산
- %V − ISO 8601 주 번호 (01~53). 해당 연도에 최소 4일이 속하는 첫 주를 1주차로 하며, 월요일을 주의 시작으로 간주
- %W − 올해의 주 번호, 첫 번째 월요일을 첫 주의 시작으로 계산
- %w − 요일을 10진수로 표현, 일요일=0
- %x − 시간을 제외한 선호 날짜 표현
- %X − 날짜를 제외한 선호 시간 표현
- %y − 세기를 제외한 연도 (00~99)
- %Y − 세기를 포함한 연도
- %Z 또는 %z − 시간대 또는 그 이름·약어
- %% − 리터럴 % 문자
반환값(Return)
strptime() 함수는 파싱에 성공하면 배열(array)을 반환하고, 실패하면 FALSE를 반환합니다.
사용 예제
다음은 strptime() 함수의 기본적인 사용 예제입니다.
<?php
$format = '%d/%m/%Y %H:%M:%S';
$strf = strftime($format);
echo "$strf\n";
print_r(strptime($strf, $format));
?>
실행 결과(Output)
11/10/2018 05:18:13
Array
(
[tm_sec] => 13
[tm_min] => 18
[tm_hour] => 5
[tm_mday] => 11
[tm_mon] => 9
[tm_year] => 118
[tm_wday] => 4
[tm_yday] => 283
[unparsed] =>
)
결과 해석 시 주의할 점
반환 배열의 값을 활용할 때는 다음 두 가지를 반드시 기억해야 합니다.
- tm_year는 1900년 기준 경과 연도이므로, 실제 연도를 구하려면 1900을 더해야 합니다. 위 예제에서 118이므로 1900 + 118 = 2018년입니다.
- tm_mon은 0부터 시작하므로, 실제 월을 구하려면 1을 더해야 합니다. 위 예제에서 9이므로 10월을 의미합니다.