将时区偏移转换为小时&分钟保留标志

时间:2014-07-01 10:47:33

标签: php mysql magento zend-framework timezone

假设我有这样的偏移量:

$secOffset =  -28800 

我需要它以可用于MYSQL函数convert_tz()

的格式进行转换

如果我使用gmdate("h:i", secOffset)我的16:00几乎是正确的,但它会错过减号-(这非常重要)

替代方法:

假设我有一个时间字符串America/Los_Angeles,我想转换一个对MYSQL函数有用的偏移量convert_tz()

最终的预期输出是格林尼治标准时间的偏差,所以给定时区 例如,拥有像America/Los_Angeles这样的时区,输出应为: −08:00

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

1 个答案:

答案 0 :(得分: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来帮助将该时间间隔转换为小时/分钟。