我有一个脚本,可以引入来自不同时区的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
。