用PHP转换时区


Converting Timeszones in PHP

我有一个脚本,可以引入来自不同时区的RSS提要。然后,我发布了带有twitter风格时间显示的RSS提要,上面写着"大约10分钟前发布的"。但因为我无法将这些时间转换为我的GMT时区,所以显示错误的时间,例如美国东部时间的帖子总是说"大约5小时前"。

我四处寻找解决方案,但似乎没有一个对我有效。我想知道你能否告诉我哪里出了问题。

$dbTimezone = new DateTimeZone($dbStoredTimezone); //$dbStoredTimezone = 'EST'
$dbDate = new DateTime($dbStoredDate, $dbTimezone); //$dbStoredDate = '2012-03-01 05:27:26'
$gmtTimezone = new DateTimeZone('GMT');
echo $gmtTimezone->getOffset($dbDate); //always echo's 0
$offset = DateInterval::createFromDateString ($gmtTimezone->getOffset($dbDate));
$dbDate->add($offset);

问题似乎出在$gmtTimezone = new DateTimeZone('GMT');中。因为getOffset()返回GMT的偏移量(请参见此处:http://www.php.net/manual/en/datetimezone.getoffset.php)。这正是它总是返回0的原因。

如果您使用DateTime::getOffset()方法,它应该可以工作。

这是您编辑的代码:

<?php
$dbTimezone = new DateTimeZone($dbStoredTimezone); //$dbStoredTimezone = 'EST'
$dbDate = new DateTime($dbStoredDate, $dbTimezone);
echo $dbDate->getOffset();
$offset = DateInterval::createFromDateString ($dbDate->getOffset());
$dbDate->add($offset);

我的成绩是-18000