如何使用PHP获取正确的时区值

时间:2014-02-27 15:37:04

标签: php timezone

我正在使用以下代码将服务器时间更改为另一个时区

 $datetime = new DateTime(2014-02-27 03:03:00);

$la_time = new DateTimeZone('America/New_York');
$datetime->setTimezone($la_time);
$dateformat="Y-m-d h:i A";
return $datetime->format($dateformat);

除AM / PM外其工作正常......

正确的结果是:02-26-14 10:03 AM但是我的结果是02-26-14 10:03 PM。

你可以告诉我问题在哪里

2 个答案:

答案 0 :(得分:2)

结果将始终基于原始时区设置。如果您想要转换为其他时区,则必须在 设置时区后初始化DateTime对象

这是一项让工作更轻松的功能:

function convertTimezone($date,$from_tz,$to_tz,$format='Y-m-d h:i A') {
    $date = new DateTime($date, new DateTimeZone($from_tz));
    $date->setTimezone(new DateTimeZone($to_tz));
    return $date->format($format);
}

可以通过checking if the supplied timezones are valid改进该功能。

示例用法:

echo convertTimezone('2014-02-27 03:03:00','Pacific/Nauru','Pacific/Chatham');

输出:

2014-02-27 04:48 AM

Demo

答案 1 :(得分:1)

初始化DateTime时设置时区:

$datetime = new DateTime("2014-02-27 03:03:00", new DateTimeZone('America/New_York'));
$dateformat="Y-m-d h:i A";
return $datetime->format($dateformat);

设置DateTime时,它会使用当时有效的时区。如果您稍后更改时区,它将更改时间的表示,但时间将基于原始时区设置。

编辑:我没有仔细阅读这个问题;您应该在初始化DateTime对象as in the manual时设置时区。