在php中转换为相同的时区

时间:2012-07-24 04:23:59

标签: php mysql timezone

奇异。这不是一个边缘案例。相反,假设我的服务器在美国/多伦多存储它的日期/时间。然后,我通过时间转换逻辑运行它,比如说,你在西海岸。这是我得到的代码:

$timestamp = '2012-07-25 16:30:00';
$to = 'America/Toronto';
$from = 'America/Toronto';

// system timezone
$system = (new DateTimeZone($from));

// desired conversion timezone
$desired = (new DateTimeZone($to));

// timestamp DateTime object
$resource = (new DateTime($timestamp, $system));

// offset
$offset = $desired->getOffset($resource);
print($offset);

此时打印的偏移量为-14440(4小时)。我不认为这里有系统或数据库时区(两者都设置为America / Toronto)。任何光线都会受到赞赏。令人困惑:(

2 个答案:

答案 0 :(得分:3)

DateTimeZone::getOffset()以秒为单位返回GMT的偏移量(-14440 =美国/多伦多的4小时)。

修改:

对我最初与DateTime::getOffset()混淆而道歉!

无论如何,要解决问题的标题,请使用DateTime::setTimeZone()在时区之间进行转换。

答案 1 :(得分:1)

这可能是你正在寻找的,两个时区之间的偏移。

// system timezone
$system = (new DateTimeZone($from));

// desired conversion timezone
$desired = (new DateTimeZone($to));

// timestamp DateTime object
$resource = (new DateTime($timestamp, $system));
$desiredDateTime = (new DateTime($timestamp, $desired));

// offset
$offset = $desired->getOffset($desiredDateTime) - $system->getOffset($resource);
print($offset);