将时区转换为另一个时区

3

我希望将从数据库中获取的日期进行转换,该日期是由CURRENT_TIMESTAMP生成并存储在timestamp列类型中的,需要将其从GMT+8转换为GMT+1。

$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"的输出,我相信这是错误的。
在这里可能会错过什么?

请问您期望什么输出? - sephoy08
$time 时间相比,相同格式,但小于 7 小时。 - fishcracker
为什么不直接从日期中减去7个小时呢? - sephoy08
很抱歉,我不能这样做。我正在寻找一种可以操作时区的方法,以便可以在不同的时区之间进行转换。 - fishcracker
看看我的回答,也许能帮到你。 - sephoy08
你正在开发网站还是其他什么东西? - oxygen
3个回答

3
首先,您需要使用原始时区实例化datetime对象。然后,在datetime对象实例化之后,使用DateTime::setTimezone()调整时区。
请参阅此代码,我已将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(例如使用date_default_timezone_set()),则无需传递初始的DateTimeZone对象,因为新创建的DateTime对象将自动使用该时区。

如果我不知道数据库服务器的时区怎么办? - Kelvin
JS有同样的修复方法吗? - Kumaresan Sd

1
也许这可以帮助你。 只需将其集成到查询中,即可简化您的编码:
SELECT CONVERT_TZ('2012-11-07 15:05:26','+08:00','+01:00');

您可以在这里获取更多信息,了解您想要使用的时区。并且可以在这里获得更多理解。


0

请检查:

<?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
?>

嘿,给我踩票的人!!你能否友善地告诉我原因呢? - metalfight - user868766

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接