정의 및 사용 방법
- PHP 버전
- 5.1+
date_default_timezone_set() 함수는
PHP 스크립트 내의 모든 날짜 및 시간 함수에서 사용되는 기본 날짜 시간대(timezone)를 설정합니다.
PHP 스크립트 최상단에 date_default_timezone_set('Asia/Seoul');을 한 줄 적어주는 것만으로
모든 날짜 계산의 기준을 대한민국 표준시(KST, Asia/Seoul)로 변경할 수 있습니다.
특징
- PHP에서는 날짜 시간대(timezone) 목록을 제공합니다. 이 목록에서 유효한 날짜 시간대를 찾아 이 함수의 매개변수로 지정해 사용할 수 있습니다.
- 이 함수는
php.ini파일에서 설정(date.timezone)한 기본 날짜 시간대를 덮어씁니다. - 단, 서버 설정 전체가 아니라 현재 실행 중인 스크립트에서만 유효합니다.
기본 예제
/* date_default_timezone_set(string $timezoneId) */
// PHP 스크립트 내에서 기본 날짜 시간대를 설정
// 날짜 시간대를 '대한민국 표준시(KST, Asia/Seoul)'로 설정
date_default_timezone_set('Asia/Seoul');
// 설정한 시간대 기준으로 현재 날짜와 시간을 출력
echo date('Y-m-d H:i:s');
코드 부연설명
date() 함수는 매개변수로 지정된 형식의 현재 날짜와 시간을 문자열로 반환합니다.
'Y-m-d H:i:s'로 지정하면, 4자리 연도, 2자리 월, 2자리 일, 2자리 시, 2자리 분, 2자리 초 형식으로 출력합니다.
추가 팁!
현재 설정된 기본 날짜 시간대를 확인하고 싶다면 date_default_timezone_get() 함수를 사용해 보세요.
구문
date_default_timezone_set(string $timezoneId): bool
매개변수
$timezoneId |
설정하려는 시간대의 식별자(예: 'UTC', 'Africa/Lagos', 'Asia/Hong_Kong' 등)입니다. 문자열로 지정하며, PHP에서 지원하는 날짜 시간대(timezone) 목록에서 확인할 수 있습니다. |
|---|
참고하세요!
매개변수로 전달되는 시간대 식별자의 "대소문자를 반드시 구분해야 한다"거나 "구분하지 않는다"는 명시적인 언급이 없습니다. 그러나, PHP에서 지원하는 날짜 시간대(timezone) 목록에 있는 대소문자를 그대로 사용하는 것을 권장합니다.
반환 값
전달된 $timezoneId가 유효하면 true를, 그렇지 않으면 false를 반환합니다.
주의할 점
date_default_timezone_set() 함수는 어디에 배치하느냐에 따라 중요한 영향을 미칠 수 있습니다. 이 함수는 PHP 스크립트의 기본 날짜 시간대(timezone)를 설정하는 함수로, 설정을 변경한 이후에 실행되는 모든 날짜 및 시간 관련 함수에 영향을 미칩니다.
가장 먼저 호출(Top of the script)
date_default_timezone_set() 함수는 이 함수로 설정한 기본 날짜 시간대(timezone)에 적용받아야 하는 날짜 및 시간 함수(예: date(), time(), strtotime())를 호출하기 전에 가장 먼저 실행되어야 합니다.
만약 시간 함수를 먼저 쓰고 나중에 date_default_timezone_set() 함수로 설정하면, 먼저 쓴 시간 함수의 기본 날짜 시간대(timezone)가 다를 수 있기 때문입니다.
특정 구간에서만 사용 시 원상복구
특정 구간에서만 원하는 날짜 시간대(timezone)를 설정해야 하는 경우 date_default_timezone_set() 함수는 매우 유용합니다.
하지만, 특정 구간 이외에서는 기존에 사용하던 기준 날짜 시간대로 반드시 원상복구해야 합니다. 특히 시간의 경우에는 에러 체크 등 검수 절차에서 그냥 지나치기 쉬우므로 원상복구를 꼭 신경 써야 합니다.
활용 예제
php.ini 파일에서 서버 설정 전체에 대한 기본 날짜 시간대를 설정(date.timezone)할 수 있습니다.
하지만, 개발자가 특정 컴포넌트나 구간, 아니면, php.ini 파일을 접근하지 않은 상태에서 원하는 기본 날짜 시간대를 설정할 필요가 있습니다.
특정 컴포넌트나 구간의 예를 들어, 특정 예약 시스템에서 국가나 도시별 기준으로 날짜를 출력하거나 서비스를 제공할 때 date_default_timezone_set() 함수를 사용하면 해당 예약 시스템에만 원하는 날짜 시간대를 설정할 수 있습니다. 또한, 날짜 기반의 보고서를 다루는 시스템에서도 유용하게 활용할 수 있습니다.
php.ini 파일을 접근하지 않은 상태에서 원하는 기본 날짜 시간대를 설정하는 경우도 꽤나 있습니다.
특히, 다국어 사이트를 운영하는 관리자는 해당 언어별 시간대를 관리자 페이지에서 설정할 때 날짜 시간대를 선택하면 내부적으로 개발자는 php.ini 파일이 아닌 date_default_timezone_set() 함수를 사용해서 선택된 날짜 시간대로 서비스되도록 개발할 수 있습니다.
관리자가 시스템 시간대 변경(관리자 대시보드 예시)
관리자 페이지에서 시스템의 시간대 설정을 변경하는 예제입니다.
date_default_timezone_set() 함수가 어떻게 활용되었는지 살펴보세요.
<form method="post">
<select name="timezone">
<option value="Asia/Seoul">Seoul (KST)</option>
<option value="America/New_York">New York (EST)</option>
<option value="Europe/London">London (GMT)</option>
</select>
<button type="submit">시간대 변경</button>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 1. 관리자가 선택한 날짜 시간대 값 가져오기
$timezoneId = $_POST['timezone'];
// 2. 선택된 값으로 기본 날짜 시간대 설정
// 실제 서비스에서는 $timezoneId 값이 유효한지 검사하는 과정이 필요합니다.
date_default_timezone_set($timezoneId);
// 3. 변경된 날짜 시간대에 맞는 현재 시간 출력
echo "날짜 시간대가 변경되었습니다. 현재 시간: " . date('Y-m-d H:i:s');
}
?>