在php中转换到同一时区


Converting to the same timezone in php

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

$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小时)。我不认为系统或数据库时区会出现在这里(两者都设置为美国/多伦多)。如有任何线索,我们将不胜感激。混淆:(

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

编辑:

对于我最初对DateTime::getOffset()感到困惑深表歉意!

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

这可能就是您想要的,两个时区之间的偏移量。

// 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);