정의 및 사용 방법
- PHP 버전
- 4+
mktime() 함수는 지정한 특정 시점의 날짜와 시간을 유닉스 타임스탬프(Unix Timestamp)로 변환하여 정수(int)로 반환합니다.
지정한 특정 시점은 현재 구현되는 PHP 스크립트에 설정된 기본 날짜 시간대(timezone)를 기준으로 합니다.
유닉스 타임스탬프(Unix Timestamp)는 컴퓨터가 시간을 기록하기 위해 사용하는 숫자 형식의 공통 시각 표현 방식으로, 날짜와 시간을 '초(seconds)' 단위로 변환한 정수입니다. 사람이 직접 이 유닉스 타임스탬프 값을 계산하기 어렵기 때문에 PHP에서는 특정 시점의 날짜와 시간을 주로 mktime() 함수를 이용해 유닉스 타임스탬프로 변환해서 활용합니다.
특징
- 매개변수에 특정 날짜와 시간을 지정하면, 스크립트에서 설정된 기본 날짜 시간대(timezone)를 기준으로 유닉스 타임스탬프(Unix Timestamp)로 변환하여 정수(int)로 반환합니다.
- 유닉스 타임스탬프만을 반환하기 때문에 시간대(timezone), 요일, 월, 연도 등의 추가 정보는 포함되지 않습니다.
예제
/**
* 간단 구문 설명
*
* mktime($hour, $minute, $second, $month, $day, $year): int|false
* @param int $hour (필수): 해당 날짜의 시작 '시'를 기준으로 한 시각
* @param int $minute, $second, $month, $day, $year (옵션): 지정된 날짜와 시간을 설정
*/
/* 2025년 12월 25일 9시 30분 5초의 타임스탬프 구하기 */
$timestamp = mktime(9, 30, 5, 12, 25, 2025);
echo $timestamp; // 해당 시점의 유닉스 타임스탬프를 정수로 출력
/* mktime() 함수 활용 예제: 읽기 쉬운 날짜/시간으로 변환 */
echo date('Y-m-d H:i:s', $timestamp); // 해당 시점 기준 날짜와 시간을 'YYYY-MM-DD HH:MM:SS' 형식으로 출력
코드 부연설명
date() 함수는 날짜와 시간을 지정한 형식(포맷, Format)에 맞춰서 문자열로 반환합니다.
위 예제 코드에서 사용된 두 번째 매개변수는 옵션이며, 원하는 시간을 지정하는 유닉스 타임스탬프(Unix Timestamp)입니다. 정수(int)로 지정합니다.
추가 팁!
지정한 특정 시점의 날짜와 시간이 아닌,
현재 시점의 날짜와 시간을 유닉스 타임스탬프로 변환하여 정수로 반환하려면 time() 함수를 사용하세요.
추가 팁!
현재 설정된 기본 날짜 시간대를 확인하고 싶다면 date_default_timezone_get() 함수를 사용해 보세요.
구문
mktime(
int $hour,
?int $minute = null,
?int $second = null,
?int $month = null,
?int $day = null,
?int $year = null
): int|false
주의하세요!
매개변수의 순서가 월, 일, 연도 순으로 되어 있어 일반적인 연도, 월, 일 순서가 아니라는 점에 주의해야 합니다.
매개변수
$hour |
필수(PHP 8.0부터). 24시간제 기준으로 한 지정할 '시'를 정수(int)로 지정합니다.
|
|---|---|
$minute |
옵션. 정시 시작 시점을 기준으로 한 '분' 단위 값을 정수(int)로 지정합니다. |
$second |
옵션. 분의 시작 시점을 기준으로 한 '초' 단위 값을 정수(int)로 지정합니다. |
$month |
옵션. 지정할 '월'을 정수(int)로 지정합니다. |
$day |
옵션. 지정할 '일'을 정수(int)로 지정합니다. |
$year |
옵션. '연도'를 정수(int)로 지정합니다. |
반환 값
지정한 특정 시점의 날짜와 시간을 유닉스 타임스탬프(Unix Timestamp)로 변환하여 정수(int)로 반환합니다. 만약 실패하면 false를 반환합니다.
반환되는 유닉스 타임스탬프(Unix Timestamp)
유닉스 타임스탬프(Unix Timestamp)는 1970년 1월 1일 00:00:00 UTC(협정 세계시)를 기준으로 지정한 특정 시점의 날짜와 시간까지 경과한 시간을 초(seconds) 단위로 나타낸 정수입니다.
따라서, 반환되는 값에 특정 시간만큼 초(seconds) 단위로 계산되는 정수를 더하거나 빼서 특정 시점을 기준으로 하는 미래/과거 날짜를 구할 수 있습니다.
// 2025년 12월 31일 23시 59분의 유닉스 타임스탬프
$timestamp = mktime(23, 59, 0, 12, 31, 2025);
echo $timestamp; // 출력: 1767235140
// 타임스탬프에서 1일을 더한 날짜 계산(미래 날짜)
$new_timestamp = $timestamp + (60 * 60 * 24); // 1일(24시간)을 초 단위로 더함
echo date('Y-m-d H:i:s', $new_timestamp); // 출력: 2026-01-01 23:59:00
// 타임스탬프에서 1일을 뺀 날짜 계산(과거 날짜)
$past_timestamp = $timestamp - (60 * 60 * 24); // 1일(24시간)을 초 단위로 뺌
echo date('Y-m-d H:i:s', $past_timestamp); // 출력: 2025-12-30 23:59:00
변경 이력
| 버전 | 설명 |
|---|---|
| 8.0.0 | PHP 8.0.0부터 $hour는 더 이상 옵션이 아니라 필수입니다. 지정하지 않으면 Fatal error가 발생합니다.
8.0.0 이전에는 $hour를 생략하면, 현재 시점의 '시'가 지정되었습니다. |
| 8.0.0 | PHP 8.0.0부터 $minute, $second, $month, $day, $year 매개변수가 이제 nullable하게 변경되었습니다. 이것은 매개변수의 값으로 null을 지정할 수 있음을 의미합니다. |
활용 예제
mktime() 함수는 특정 날짜를 기준으로 하기 때문에, 특정 이벤트나 기념일 등을 현재 시점에서 계산할 때 특히 유용하게 활용됩니다.
결혼 기념일까지 남은 일수 계산
// 결혼 기념일: 2027년 5월 20일 (미래 날짜로 설정)
$anniversary_timestamp = mktime(0, 0, 0, 5, 20, 2027);
// 현재 시점의 유닉스 타임스탬프
$current_timestamp = time();
// 기념일까지 남은 초(seconds) 계산
$seconds_until_anniversary = $anniversary_timestamp - $current_timestamp;
// 초를 일수로 변환 (60초 * 60분 * 24시간 = 86400초)
$days_until_anniversary = floor($seconds_until_anniversary / (60 * 60 * 24));
echo "결혼 기념일까지 남은 일수: " . $days_until_anniversary . "일";
코드 부연설명
floor() 함수는 실수를 전달받아 소수점 이하를 무조건 버리고, 그보다 작거나 같은 가장 큰 정수를 반환합니다.
예제에서는 아직 지나지 않은 시간은 제외하고 완전히 경과한 '전체 일수'만 정확히 구하기 위해 사용되었습니다.
PHP 공부를 시작한 지 며칠이나 지났을까?
/* 활용 예제: PHP 공부를 시작한 지 며칠이나 지났을까? */
// PHP 공부 시작일: 2026년 2월 10일 (자신이 공부를 시작한 날짜를 넣어보세요!)
$start_date = mktime(0, 0, 0, 2, 10, 2026);
// 현재 시점의 유닉스 타임스탬프
$current_time = time();
// 시작일부터 지금까지 흐른 시간(초) 계산
$elapsed_seconds = $current_time - $start_date;
// 초를 일수로 변환
$elapsed_days = floor($elapsed_seconds / (60 * 60 * 24));
echo "PHP 공부를 시작한 지 벌써 " . $elapsed_days . "일이 지났습니다. ";
echo "이 정도면 이제 PHP와 제법 친해지셨나요? 끝까지 함께 가시죠! 화이팅!";