정의 및 사용 방법
- PHP 버전
- 4+
microtime() 함수는 현재 시점의 날짜와 시간을 마이크로초(μs, 1/1,000,000초) 단위까지 포함한 유닉스 타임스탬프(Unix Timestamp)로 변환하여 반환합니다.
유닉스 타임스탬프(Unix Timestamp)는 컴퓨터가 시간을 기록하기 위해 사용하는 숫자 형식의 시각 표현 방식으로, 날짜와 시간을 '초(seconds)' 단위의 숫자로 나타낸 값입니다. microtime() 함수를 사용하면 이 값에 마이크로초(μs, 1/1,000,000초) 단위까지 포함되는데, 이처럼 숫자로만 구성된 유닉스 타임스탬프 값은 사람이 직접 계산하거나 시각을 파악하기 어렵습니다. 따라서 PHP에서 현재 시점의 날짜와 시간을 '마이크로초' 단위까지 처리해야 할 때는 사람이 직접 계산하는 대신 microtime() 함수를 활용합니다.
특징
- 현재 시점은 현재 구현되는 PHP 스크립트에 설정된 기본 날짜 시간대(timezone)를 기준으로 합니다.
- 유닉스 타임스탬프만을 반환하기 때문에 시간대(timezone), 요일, 월, 연도 등의 추가 정보는 포함되지 않습니다.
- 반환되는 유닉스 타임스탬프는 이 함수의 매개변수 설정에 따라 '마이크로초' 형태의 문자열(string)이나, 소수점을 포함한 초 단위의 실수(float)를 반환하게 할 수 있습니다.
기본 예제
/**
* 간단 구문 설명
*
* microtime(bool $as_float = false): string|float
* @param bool $as_float (옵션): 유닉스 타임스탬프의 반환 값 형태 지정 (기본값은 false)
* true - 소수점을 포함한 초 단위의 실수(float)를 반환
* false - 마이크로초(μs) 단위까지 포함한 문자열(string)을 반환
*/
/* 소수점을 포함한 초 단위의 실수(float)를 반환하기 */
var_dump(microtime(true)); // 반환 값 예시: float(1772711404.5721)
/* '마이크로초 초' 순서의 문자열(string)을 반환하기 */
var_dump(microtime(false)); // 반환 값 예시: string(21) "0.57210000 1772711404"
추가 팁!
마이크로초가 포함되지 않은 조금 더 덜 정밀한 '초' 단위까지만의 현재 시점의 날짜와 시간을 유닉스 타임스탬프로 변환하려면 time() 함수를 사용하세요.
추가 팁!
현재 설정된 기본 날짜 시간대를 확인하고 싶다면 date_default_timezone_get() 함수를 사용해 보세요.
구문
microtime(bool $as_float = false): string|float
매개변수
$as_float |
옵션. 유닉스 타임스탬프의 반환 값 형태를 지정합니다.
|
|---|
반환 값
microtime() 함수에서 유닉스 타임스탬프(Unix Timestamp)는 1970년 1월 1일 00:00:00 UTC(협정 세계시)를 기준('유닉스 에포크'라고 함)으로 현재 시점까지 경과한 시간을 '마이크로초' 단위까지 나타낸 값입니다.
$as_float가 false이면 'msec sec' 형식의 문자열을 반환합니다.
- 초(sec): 유닉스 에포크 이후 경과된 초 수를 나타냅니다.
- 마이크로초(usec): 해당 초(sec) 이후 경과된 마이크로초 수를 나타내며, 소수점 형태의 숫자로 표시됩니다.
$as_float를 true로 지정하면 현재 시간을 유닉스 에포크 이후 경과된 초 단위로 나타낸 실수(float) 값을 마이크로초 단위까지 포함하여 반환합니다.
활용 예제
microtime() 함수는 초(second) 단위는 너무 듬성듬성하고 그렇다고 나노초(ns, 1/1,000,000,000초) 단위까지 측정할 필요가 없는 웹 개발 환경에서 적당하고 실용적인 도구입니다.
예를 들면 다음과 같은 상황에서 유용합니다.
- 사용자에게 "페이지 로딩에 0.0x초 소요되었습니다"라고 보여주고 싶을 때
- 개발자의 감이 아닌 수치로 성능을 비교하고 싶을 때(예: 이 쿼리가 0.1초 걸리나, 0.01초 걸리나?)
- 로그 파일에 기록할 때 1초 안에 몰리는 여러 이벤트의 순서를 구분하고 싶을 때
페이지 로딩 시간 표시하기
사용자에게 "이 페이지는 0.0x초 만에 열렸습니다"와 같은 정보를 제공할 때 유용합니다. 계산을 위해 매개변수를 true로 지정하여 실수(float) 값을 활용합니다.
// 실행 시작 시각 기록
$start_time = microtime(true);
// --- 페이지 로직 실행 영역 (예: DB 조회, API 호출 등) ---
usleep(50000); // 예시를 위한 0.05초 강제 지연
// --------------------------------------------------
// 실행 종료 시각 기록 및 차이 계산
$end_time = microtime(true);
$loading_time = round($end_time - $start_time, 4);
echo "페이지 로딩에 {$loading_time}초 소요되었습니다.";
// 출력 예시: 페이지 로딩에 0.0521초 소요되었습니다.
코드 성능 비교 및 벤치마킹
개발자의 주관적인 느낌이 아니라, 실제 소요되는 시각을 수치로 측정하여 어떤 코드나 쿼리가 더 효율적인지 비교할 수 있습니다.
// 로직 A의 실행 시간 측정
$start_a = microtime(true);
// 로직 A 실행...
$duration_a = microtime(true) - $start_a;
// 로직 B의 실행 시간 측정
$start_b = microtime(true);
// 로직 B 실행...
$duration_b = microtime(true) - $start_b;
echo "로직 A 소요 시간: {$duration_a}s" . PHP_EOL;
echo "로직 B 소요 시간: {$duration_b}s" . PHP_EOL;
echo "두 로직의 차이: " . abs($duration_a - $duration_b) . "s";
로그 파일 내 이벤트 순서 구분하기
1초 안에 수많은 요청이 몰리는 환경에서 로그를 기록할 때, time() 함수로는 모두 같은 시각으로 표시되어 순서를 알 수 없습니다. 이때 microtime(false)를 사용하면 아주 미세한 시각 차이까지 기록할 수 있습니다.
// 마이크로초 단위까지 포함된 문자열(string) 형태로 시각 기록
$event_time = microtime(false);
// 로그 메시지 생성
$log_entry = "[" . $event_time . "] 사용자 결제 요청 발생" . PHP_EOL;
echo $log_entry;
// 출력 예시: [0.57210000 1772711404] 사용자 결제 요청 발생
같이 보기
- PHP date_default_timezone_set() 함수 – 날짜 기본 시간대 설정하기
- PHP date_default_timezone_get() 함수 – 날짜 기본 시간대 가져오기
- PHP date() 함수 – 날짜와 시간을 원하는 형식의 문자열로 만들기
- PHP date() 함수 – 날짜와 시간을 원하는 형식의 문자열로 만들기
- PHP strtotime() 함수 – 영어 기반 날짜와 시간 문자열을 유닉스 타임스탬프로 변환
- PHP time() 함수 – 현재 시점의 날짜와 시간을 유닉스 타임스탬프로 반환
- PHP mktime() 함수 – 지정한 시점의 날짜와 시간을 유닉스 타임스탬프로 반환
- PHP checkdate() 함수 – 달력상 실제로 존재하는 날짜인지 체크하기