>我正在使用以下代码将服务器时间更改为另一个时区
$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);
它工作正常,除了上午/下午...
正确结果是:02-26-14 10:03上午,但我得到的结果是 02-26-14 10:03 下午。
你能告诉我问题在哪里吗
结果将始终基于原始时区设置。如果要转换为其他时区,则必须在设置时区后初始化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);
}
可以通过检查提供的时区是否有效来改进该功能。
示例用法:
echo convertTimezone('2014-02-27 03:03:00','Pacific/Nauru','Pacific/Chatham');
输出:
2014-02-27 04:48 AM
演示
在初始化日期时间时设置时区:
$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
对象时设置时区,如手册中所示。