<?php
$first = '2011-04-27';
$second = '2011-04-27 16:20:12';
$third = '2011-04-27 16:20:12+00';
$dt = new DateTime($first);
$dt->setTimeZone(new DateTimeZone($dt->getTimeZone()->getName()));
echo $dt->getTimezone()->getName().'<br />';
// OK
$dt = new DateTime($second);
$dt->setTimeZone(new DateTimeZone($dt->getTimeZone()->getName()));
echo $dt->getTimezone()->getName().'<br />';
// OK
$dt = new DateTime($third);
$dt->setTimeZone(new DateTimeZone($dt->getTimeZone()->getName()));
echo $dt->getTimezone()->getName().'<br />';
// Error
// ->getName() returns unexpectedly +00, which is not a name, but offset
날짜 시간 추출물을 정말로 이름입니다 마지막 문자열 시간대 이름+00
에서,하지만 는을 상쇄하기 때문에 시간대로 설정할 수 없습니다하지 않습니다 ...날짜 시간 :: 된 getTimezone는 시간대의 이름을 반환하지만, 오프셋
이 문제는
public function __sleep()
{
$this->fix = array($this->format('Y-m-d H:i:s'), $this->getTimezone()->getName());
return array('fix');
}
public function __wakeup()
{
$this->__construct($this->fix[0], new DateTimeZone($this->fix[1]));
unset($this->fix);
}
내가 KN ... 때 (드) 직렬화 DateTime 개체 문제를 일으키는 예를 들어 얻는 것이 더 낫습니다. 이 문자열 : 2011-04-27 16:20:12 UTC
, 아무튼 메트로가 getName()
이라면 이름으로 +00
을 반환하지 않습니까?
나는 +00을 UTC 나 GMT로 대체 할 코드 조각을 쓸 수도 있고, 시간대 이름을 반환하도록 데이터베이스를 설정할 수도 있지만 그건 내 포인트가 아니야. 내 요점은 "왜 getName() 메서드가 오프셋을 반환하는지"입니다. "? –
Wh1T3h4Ck5가 말하는 것은 정확합니다. 왜냐하면'getName' 함수가 PHP에서 정의 된 시간대로 오프셋을 해결할 수 없기 때문입니다. –