2014-07-01 23 views
1

假設我有一個偏移量是這樣的:轉換時區偏移小時和分鐘保留標誌

$secOffset = -28800 

我需要它的格式如果我使用gmdate("h:i", secOffset)是與MYSQL功能convert_tz()

可轉換我16:00幾乎是正確的,但它錯過了零下-(這是很重要的)

替代做法:

假設我有一個時間字符串America/Los_Angeles,我想在一個有用的偏移轉換爲MySQL功能convert_tz()

最終預期輸出是從格林尼治標準時間偏移,從而給出一個時區。
對於離,具有類似於America/Los_Angeles一個時區,輸出應該是: −08:00

我上的Magento/Zend的,所以如果任何可用的功能是Zend的我能接受基於它的答案。

+0

解釋你的問題實際上你想要什麼,你的期望輸出是什麼? – Sadikhasan

+0

好了......我想現在更清楚 – WonderLand

+0

時區標識符不一定對應於單個偏移量。這取決於一年中的時間(DST)。 – cmbuckley

回答

1

您應該使用DateTimeZoneDateInterval類這樣的:

$tzid = 'America/Los_Angeles'; 

$tz = new DateTimeZone($tzid); 
$date = new DateTime('now', $tz); 

// create a new date offset by the timezone offset 
// gets the interval as hours & minutes 
$offset = $tz->getOffset($date) . ' seconds'; 
$dateOffset = clone $date; 
$dateOffset->sub(DateInterval::createFromDateString($offset)); 

$interval = $dateOffset->diff($date); 
$formatted = $interval->format('%R%H:%I'); 

這是一個有點令人費解,因爲你第一次得到了時區在幾秒鐘內偏移,然後用DateTime來轉換間隔爲小時/分鐘。

+0

看起來可行,但也有點複雜... (更多的Java比PHP :)無論如何感謝 – WonderLand

+0

如果你想要一些蹩腳的程序代碼,嘗試'($偏移<0?' - ':'+')。 gmdate('h:i',abs($ offset));':-) – cmbuckley

相關問題