2014-07-01 26 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

相关问题