Php 将时区转换为其他时区

Php 将时区转换为其他时区,php,mysql,date,datetime,timezone,Php,Mysql,Date,Datetime,Timezone,我想将从数据库获取的日期从GMT+8转换为GMT+1,该日期通过CURRENT_TIMESTAMP生成,并存储在TIMESTAMP列类型中 $time = "2012-11-07 15:05:26"; // fetch from database $date = new DateTime($time, new DateTimeZone('Europe/Berlin')); echo $date->format('Y-m-d H:i:s'); 然而,这将产生一个输出“2012-11-07

我想将从数据库获取的日期从GMT+8转换为GMT+1,该日期通过
CURRENT_TIMESTAMP
生成,并存储在
TIMESTAMP
列类型中

$time = "2012-11-07 15:05:26"; // fetch from database
$date = new DateTime($time, new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s');
然而,这将产生一个输出“2012-11-07 15:05:26”,我很确定这是错误的

我在这里遗漏了什么?

检查以下内容:

<?php

$time = "2012-11-07 15:05:26"; // fetch from database

$tz_object = new DateTimeZone('Europe/Berlin'); 
$datetime = new DateTime($time); 
$datetime->setTimezone($tz_object); 
echo $datetime->format('Y-m-d H:i:s');
//output 2012-11-07 10:35:26
?>

也许这会有所帮助。 只需将其集成到查询中即可简化编码:

SELECT CONVERT_TZ('2012-11-07 15:05:26','+08:00','+01:00');

你可以在这里有更多关于你想要使用的信息。为了更好地理解

首先,您需要用原始时区实例化datetime对象。然后,在datetime对象实例化之后,使用调整时区

请参阅此代码,其中我使用了
Asia/Hong Kong
作为GMT+8时区的示例:

$time = "2012-11-07 15:05:26"; // fetch from database
$date = new DateTime($time,new DateTimeZone('Asia/Hong_Kong'));
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s'); // yields 2012-11-07 08:05:26

如果所有原始日期始终表示为GMT+8,并且PHP应用程序也设置为使用GMT+8(例如,设置为),则无需传递初始的
DateTimeZone
对象,新创建的
DateTime
对象将自动使用该时区创建。

如果您不介意的话,您希望得到什么输出?相同的格式,除了从
$time
开始的时间不到7小时之外,为什么不直接从日期开始的7小时内取反?恐怕我不会这样做,我正在寻找一种可以操纵时区的方法,所以我可以在不同的时区之间转换。看看我的答案,也许它能帮上忙!!,请告诉我原因好吗?如果我不知道数据库服务器的时区怎么办?