
DateTimeZone::__construct 메소드는 시간대를 나타내는 문자열로 객체를 생성할 때, 시간대 이름이 동일하지만 다른 시간대가 존재하는 경우, 생성된 객체의 시간대가 올바르게 반영되지 않는 문제가 발생하는 이유는 PHP의 DateTimeZone 클래스가 시간대 이름을 기준으로 시간대를 식별하기 때문입니다.
예를 들어, 'Asia/Seoul'과 'Asia/Seoul (KST)'는 동일한 시간대를 나타내지만, 생성된 객체의 시간대가 다르게 나타나는 이유는 'Asia/Seoul (KST)'는 'Asia/Seoul'에 ' (KST)'라는 추가 정보를 포함하고 있기 때문입니다.
이러한 문제를 해결하기 위한 방법은 DateTimeZone::__construct 메소드에 시간대를 나타내는 문자열을 정확하게 입력하는 것입니다. 예를 들어, 'Asia/Seoul'만 입력하는 것이 좋습니다.
또한, PHP 7.3 이상 버전에서는 DateTimeZone::__construct 메소드에 시간대 이름을 기준으로 시간대를 식별하는 대신, 시간대 ID를 기준으로 시간대를 식별하는 방법을 제공합니다. 예를 들어, 'Asia/Seoul'의 시간대 ID는 'Asia/Seoul'입니다.
이러한 방법을 사용하면 시간대 이름이 동일하지만 다른 시간대가 존재하는 경우, 생성된 객체의 시간대가 올바르게 반영될 수 있습니다.
예제:
#hostingforum.kr
php
$timezone1 = new DateTimeZone('Asia/Seoul');
$timezone2 = new DateTimeZone('Asia/Seoul (KST)');
echo $timezone1->getName() . "n"; // Asia/Seoul
echo $timezone2->getName() . "n"; // Asia/Seoul (KST)
$timezone3 = new DateTimeZone('Asia/Seoul', new DateTimeZone('Asia/Seoul'));
echo $timezone3->getName() . "n"; // Asia/Seoul
2025-07-02 06:13