반응형
Web Development · PHP 날짜·시간 함수
PHP mktime() — 특정 날짜·시각의 타임스탬프를 만드는 함수
인수 순서(시분초월일연) · date() 연계 · strtotime 비교 완전 정리
시작 오늘 분석할 코드
mktime()은 특정 날짜와 시각을 입력하면 해당 시점의 유닉스 타임스탬프를 반환하는 함수입니다. time()이 "지금"의 타임스탬프를 주는 것과 달리, mktime()은 "원하는 날짜·시각"의 타임스탬프를 생성합니다. 그 타임스탬프를 date()에 넘기면 원하는 포맷의 날짜 문자열로 변환할 수 있습니다.
<?php $timestamp = mktime(0, 0, 0, 5, 7, 2014); // mktime(시, 분, 초, 월, 일, 연) // 2014년 5월 7일 0시 0분 0초의 타임스탬프 // 타임스탬프를 date()로 포맷 $date = date('Y년 m월 d일 H시i분s초', $timestamp); print $date; // 2014년 05월 07일 00시00분00초 print $timestamp; // 1399392000 (정수) ?>
실제 출력 미리보기
mktime(0, 0, 0, 5, 7, 2014)
→
1399392000
→ date() →
2014년 05월 07일
용어 용어 정리
mktime()mktime(시, 분, 초, 월, 일, 연) — 6개 인수로 특정 시각의 타임스탬프 생성
인수 순서시·분·초·월·일·연 순. 날짜 표기와 반대 순서라 주의 필요
time()현재 시각 타임스탬프 반환 — mktime의 특수 케이스(인수 없는 버전)
date()mktime이 만든 타임스탬프를 포맷 문자열로 변환
strtotime()'+7 days' 같은 문자열로 타임스탬프 생성 — mktime의 편리한 대안
날짜 오버플로우mktime(0,0,0,2,31,2014) → 3월 3일로 자동 보정 (오버플로우 허용)
음수 타임스탬프1970년 이전 날짜는 음수 타임스탬프로 표현 — mktime으로 생성 가능
인수 생략뒤에서부터 생략 가능. 생략된 인수는 현재 시/분/초/월/일/연으로 대체
1 인수 순서 — 시·분·초·월·일·연 (날짜 표기와 반대)
가장 헷갈리는 부분 — 연도가 마지막
mktime()은 시·분·초·월·일·연 순서로 인수를 받습니다. 우리가 날짜를 표기하는 순서(연-월-일)와 정반대입니다. 특히 연도가 맨 마지막이라는 점을 주의해야 합니다.
// mktime(시, 분, 초, 월, 일, 연) mktime(0, 0, 0, 5, 7, 2014); // 시 분 초 월 일 연 // → 2014년 5월 7일 00:00:00 mktime(13, 30, 0, 12, 25, 2025); // → 2025년 12월 25일 13:30:00 mktime(0, 0, 0, 1, 1, 2000); // → 2000년 1월 1일 자정
⚠️ 인수 순서가 시·분·초·월·일·연입니다. 연도를 첫 번째로 넣는 실수가 잦습니다.
2 date()와 연계 — 특정 날짜를 사람이 읽는 형식으로
mktime → date 패턴이 핵심
mktime()이 반환한 타임스탬프를 그대로 출력하면 의미 없는 숫자입니다. date()의 두 번째 인수로 넘겨 원하는 형식으로 포맷합니다.
$ts = mktime(0, 0, 0, 5, 7, 2014); // 2014-05-07 echo date('Y-m-d', $ts); // 2014-05-07 echo date('Y년 m월 d일', $ts); // 2014년 05월 07일 echo date('D', $ts); // Wed (요일 약어) echo date('N', $ts); // 3 (ISO 요일 번호: 1=월 ~ 7=일)
3 날짜 계산 활용 — 특정 날짜 기준 N일 후
mktime에 날짜 연산을 직접 적용하면 자동 보정됨
mktime()은 일(day) 인수에 범위를 벗어난 값을 넣어도 자동으로 날짜를 조정합니다. 예를 들어 1월 45일은 2월 14일로 보정됩니다. 이 특성을 이용해 날짜 계산을 편리하게 할 수 있습니다.
// 2014년 5월 7일 기준으로 30일 후 $ts = mktime(0, 0, 0, 5, 7 + 30, 2014); echo date('Y-m-d', $ts); // 2014-06-06 (7+30=37일 → 6월로 넘어감) // 2014년 5월 7일 기준으로 3개월 후 $ts2 = mktime(0, 0, 0, 5 + 3, 7, 2014); echo date('Y-m-d', $ts2); // 2014-08-07
※ strtotime('+30 days', mktime(0,0,0,5,7,2014)) 형태가 더 읽기 쉬운 대안입니다.
반응형
4 mktime vs strtotime — 어느 쪽이 편리한가?
숫자로 날짜 지정 vs 문자열로 날짜 지정
mktime — 숫자로 지정
$y=2014; $m=5; $d=7;
mktime(0,0,0,$m,$d,$y);
변수별로 분리된 날짜 데이터
폼 입력(년/월/일 따로)에 적합
mktime(0,0,0,$m,$d,$y);
변수별로 분리된 날짜 데이터
폼 입력(년/월/일 따로)에 적합
strtotime — 문자열로 지정
strtotime('2014-05-07');
strtotime('+7 days');
문자열로 날짜 표현
상대적 날짜 계산에 편리
strtotime('+7 days');
문자열로 날짜 표현
상대적 날짜 계산에 편리
5 이벤트 마감일 판단 — 실전 패턴
특정 날짜를 기준으로 D-day 계산
$deadline = mktime(23, 59, 59, 12, 31, 2025); // 2025년 12월 31일 23:59:59 타임스탬프 $diff = $deadline - time(); $days = floor($diff / 86400); if ($days > 0) { echo "마감까지 D-{$days}"; } else { echo "마감됨"; }
6 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| 인수 순서 혼동 (연-월-일로 넣음) | mktime(2014,5,7,...) — 완전히 다른 날짜 | 순서는 시,분,초,월,일,연 — 연도가 마지막 |
| 결과를 date 없이 출력 | 1399392000 같은 숫자 그대로 출력 | date('Y-m-d', $timestamp)로 포맷 |
| 타임존 미설정 | 출력 날짜가 한국 시각과 다름 | date_default_timezone_set('Asia/Seoul') 설정 |
| 인수 생략을 잘못 이해 | mktime(0,0,0)만 쓰면 오늘 자정 타임스탬프 | 인수 생략은 현재 시간 정보로 채워짐을 인지 |
| 날짜 비교에 문자열 사용 | "2014-05-07" > "2014-04-30" → 문자열 비교, 잘못된 결과 가능 | mktime으로 타임스탬프 변환 후 정수 비교 |
핵심 한 줄 요약
mktime($h,$i,$s,$m,$d,$y)특정 날짜·시각의 유닉스 타임스탬프 생성 — 연도가 마지막
인수 순서시·분·초·월·일·연 — 날짜 표기와 반대 순서
date() 연계date('Y-m-d', mktime(...)) 패턴으로 포맷 변환
날짜 계산일/월 인수에 범위 초과 값 넣으면 자동 보정 (오버플로우)
vs strtotime숫자 변수 있으면 mktime, 문자열·상대 날짜는 strtotime
Tags
#PHP #mktime #타임스탬프생성 #특정날짜타임스탬프 #date함수 #strtotime #날짜계산 #PHP날짜함수 #PHP함수 #PHP학습 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, mktime, 타임스탬프생성, 특정날짜타임스탬프, date함수, strtotime, 날짜계산, PHP날짜함수, PHP함수, PHP학습, 웹개발, 티스토리
반응형
'php' 카테고리의 다른 글
| PHP file_get_contents() — 파일 전체 읽기 · URL 읽기 · is_readable 완전 정리 (0) | 2026.07.11 |
|---|---|
| PHP date() — 타임스탬프를 날짜 문자열로 포맷 · 포맷 문자 표 완전 정리 (0) | 2026.07.11 |
| PHP checkdate() — 날짜 유효성 검사 · 윤년 · 폼 입력 검증 완전 정리 (0) | 2026.07.10 |
| PHP time() — 유닉스 타임스탬프 · date() 연계 · 날짜 계산 완전 정리 (0) | 2026.07.10 |
| PHP trim() — 양끝 공백 제거 · ltrim · rtrim · 커스텀 문자 완전 정리 (0) | 2026.07.10 |
왕진 블로그

댓글