3

我想将从 GMT+8生成CURRENT_TIMESTAMP并存储在列类型中的数据库中获取的日期转换为 GMT+1。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"的输出,我很确定这是错误的。

我在这里可能缺少什么?

4

3 回答 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对象会自动使用该时区创建。

于 2012-11-07T07:33:06.523 回答
1

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

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

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

于 2012-11-07T07:32:23.607 回答
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
?>
于 2012-11-07T07:25:38.620 回答