본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP mktime() — 특정 날짜의 타임스탬프 생성 · date 연계 · 날짜 계산 완전 정리

by 왕진 2026. 7. 10.
반응형

 

 

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);

변수별로 분리된 날짜 데이터
폼 입력(년/월/일 따로)에 적합
strtotime — 문자열로 지정
strtotime('2014-05-07');
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학습, 웹개발, 티스토리
반응형

댓글