在PHP中转换时区

时间:2012-03-01 11:10:27

标签: php time timezone

我有一个脚本可以引入来自不同时区的RSS源。然后,我发布了一个推特风格时间显示的RSS提要,说“大约10分钟前发布”。但是因为我不能将这些时间转换成我的GMT时区,这个显示显示错误的时间,例如EST的帖子总是说“大约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);

1 个答案:

答案 0 :(得分:1)

问题似乎出现在$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