<?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
,這實際上不是名稱,而是偏移因此無法設置爲時區...DateTime :: getTimezone不返回時區名稱,而是返回偏移量
這種行爲導致了麻煩(de )序列化DateTime對象...
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);
}
我知道得到例如更好這個字符串:2011-04-27 16:20:12 UTC
,無論如何,就metod被稱爲getName()
,它不應該返回+00
作爲名稱,還是應該?
我可以寫一些代碼,它將取代+00 UTC或GMT,或者我可以設置數據庫來返回時區名稱,但這不是我的觀點......我的觀點是「爲什麼getName()方法返回偏移量「? – 2011-04-27 15:54:40
Wh1T3h4Ck5說的是正確的,這是因爲'getName'函數無法解析您在PHP中定義的時區的偏移量。 – 2011-04-27 16:00:25