将时区转换为另一个时区



我想转换我从数据库中获取的日期,该数据库是通过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" 的输出,我敢肯定是错误的。

我在这里可能缺少什么?

首先,您需要使用原始时区实例化DateTime对象。然后,在实例化DateTime对象后,使用DateTime::setTimezone()调整时区。

请参阅此代码,其中我使用Asia/Hong_Kong作为示例GMT 8 TimeZone:

$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对象将使用该时区自动创建。

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

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

您可以在此处获得有关要使用的时区的更多信息。在这里以获取更多理解

检查以下内容:

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

相关内容

  • 没有找到相关文章

最新更新