无法获得php DateTime时区转换工作。它不会改变我更改时区的时间

时间:2013-07-05 21:58:52

标签: php datetime timezone

function utcconvert($time){
 $timeformat="M j, Y g:i:s a";
 $localtime = new DateTime($time, new DateTimeZone('America/New_York'));
 $utctime = $localtime;
 $utctime->setTimeZone(new DateTimeZone('UTC'));
 return date($timeformat, $utctime->format("U"));
}

我到处都看过这个方法我寻找php时区转换,但我无法让它工作。我想从默认的mysql格式中取一个时间戳,然后用$ timeformat将其转换为UTC时间。

echo utcconvert("2013-07-05 16:23:29");

产量

Jul 5, 2013 4:23:29 pm

这是同一时间,转换为该格式。我有date_default_timezone_set("America/New_York");设置。

如何解决此问题以将服务器时间(纽约)转换为UTC时间?

2 个答案:

答案 0 :(得分:2)

当您使用DateTime$utctime->format("U")对象生成unix时间戳时,您将丢失任何时区信息,它将只返回一个整数(unix stimestamp,但出于某种原因作为字符串)和php将使用当前的默认时区威胁它。

只需将format()方法与日期格式字符串一起使用:

function utcconvert($time) {
    // ...
    return $utctime->format($timeformat);
}

According to a comment on the php.net site,其背后的原因是DateTime对象在更改时区时不会更改内部时间戳值。

答案 1 :(得分:1)

您将字符串传递给第二个参数,您应该传递一个int(UNIX时间戳) 尝试:

return date($timeformat, $utctime->getTimeStamp());

编辑:

实际上,您可以使用

return $utctime->format("U");

问题在于你总是返回一个新的日期,因为你提供了一个不好的论点。你应该检查你的php.ini和display_errors以及error_reporting,这样你就可以看到php警告你这件事情