2012-10-17 2 views
6

DateTime 객체에서 다른 TimeZones에서 시간을 가져 오는 데 관심이 있습니다. 로서이 꽤 잘 DateTime 개체는 문자열에서 생성 될 때 작동은 DateTime::setTimezone 문서 설명 :PHP DateTime 객체 - 타임 스탬프 및 시간대 충돌

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('UTC')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

echo $date->getTimestamp() . "\n"; 

상기 예제 출력 :
2000-01-01 00 : 00 : 00 + 12 : 00
2000-01-01 01 : 45 : 00 + 13 : 45
1999년 12월 31일 12 : 00 : 00 + 00 : 00
946,641,600

지금은 흥미로운 부분은 우리가 선택하는 경우 우리의 타임 스탬프를 올리고 수동 지침에 따라 DateTime 객체를 시작하십시오.

$date2 = new DateTime('@946641600'); 

$date2->setTimezone(new DateTimeZone('Pacific/Nauru')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

$date2->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

$date2->setTimezone(new DateTimeZone('UTC')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

echo $date2->getTimestamp() . "\n"; 

그리고 여기에 우리가 얻을 : // [편집] HUMM ... 죄송합니다,이 출력이 잘못 ...
1999년 12월 31일 12 : 00 : 00 + 00 : 00
1999- 12-31 12 : 00 : 00 + 00 : 00
1999년 12월 31일 12 : 00 : 00 + 00 : 00
946,641,600

UTC 영원히! 우리는 더 이상 시간대를 변경할 수 없습니다!

PHP입니까? 아니면 저입니까? 버전 5.3.15

+1

타임 스탬프로 인스턴스화 할 때 시간대를 지정하지 않습니까? –

+0

다른 결과를 얻고 있습니다 http://codepad.viper-7.com/zAv8dz – Baba

+0

버전 5.3.15에서 잘 작동합니다 ....... – Baba

답변

5

좋아, 그래서 나 혼자 화를 냈습니다. 물론, 나는 틀린 사람입니다 ...
직선적으로 말하자면, 문서 herehere에서 관련성이있는 비트를 선택합니다.
설명서는 말한다 :

// Using a UNIX timestamp. Notice the result is in the UTC time zone. 
$date = new DateTime('@946684800'); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

을 그래서 실제로, 당신은 당신의 시간대에 다시 시간을 얻을 수 setTimezone을 사용할 수 있습니다 (시스템이 그런 식으로 설정되어있는 경우 예상 할 수있는!) :

$timezone = new DateTimeZone('Europe/Madrid'); 
$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
당신은 어쨌든 UTC에있을 것입니다 때문에

$date = new DateTime('@1306123200', new DateTimeZone('Europe/Madrid')); 

는 오해의 소지가 있음을

주의! (그렇습니다. 생성자의 문서에서 매우 명확하게 지정되어 있습니다. 그러므로 조심해야합니다.)

감사합니다. @hakre 감사합니다!

+0

mysql 형식의 날짜 (사용자의 시간대에 해당)가 필요한 경우 다음을 바로 사용할 수도 있습니다. $ mysql_time = date ("Y-m-d H : i : s", $ ts_time); – mika

관련 문제