我正在使用以下代码将服务器时间更改为另一个时区
$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。
你可以告诉我问题在哪里答案 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
答案 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时设置时区。