php加减时区偏移量

php加减时区偏移量,php,timezone-offset,Php,Timezone Offset,我有一些日期存储在mysql数据库中的gmt中。 假设客户端的时区偏移量为-540;如何更正来自数据库的datetime,以反映这一点?是否有一个方便的函数可以输入日期,或者我是否需要相应地进行加减。也许这段代码可以帮助您: $format = 'Y-m-d'; $obj = new DateTime(); $date = date($format, strtotime($obj->format('Y-m-d H:i:s')) - $obj->format('Z')); 进一步阅读

我有一些日期存储在mysql数据库中的gmt中。

假设客户端的时区偏移量为-540;如何更正来自数据库的
datetime
,以反映这一点?是否有一个方便的函数可以输入日期,或者我是否需要相应地进行加减。

也许这段代码可以帮助您:

$format = 'Y-m-d';
$obj = new DateTime();
$date = date($format, strtotime($obj->format('Y-m-d H:i:s')) - $obj->format('Z'));

进一步阅读请参见。

由于您有GMT格式的数据项,因此必须使用
strottime
将其转换为时间戳,更多信息请参见: 一旦有了时间戳,就可以从中减去偏移量(540乘以60秒),然后使用
date
,将结果转换为新的日期字符串,详细信息如下:

以下是一个版本的代码,可用于:

$dbValue = $row['date']; 
$timestamp = strtotime($dbValue) - (540*60);
$result = date("Y-m-d H:i:s", $timestamp);

使用
timestamp
mysql数据类型,mysql会为您做到这一点。它是如何做到的?它不一定知道客户的时区。我想它会根据服务器的时区来做吗?我洗耳恭听-谢谢。您可以为每个连接设置客户端时区,mysql将为您完成所有的偏移工作。在SOThanks上有数百万关于它的讨论-我将字段更改为数据库中的时间戳类型的利弊是什么。在这一点上,这是一个选择,如果它能更好地为我服务的话。我认为我们在这方面走的是正确的。然而,上面的代码需要9分钟而不是9小时。我不得不说,一个缺点是,要在整个项目中显示它们,您必须将时间戳转换为日期字符串,但我想不出其他缺点。优点是,您可以很容易地按日期对行进行排序,因为时间戳基本上是数字。你可以简化相对计算,就像你最初的问题一样。希望这有帮助。如果你说需要9分钟,而不是9小时,你可以通过再次使用strotime获得偏移量,如下所示:$offset=strotime(“-9小时”);并从原始时间戳中减去该值。让我们知道它是否有效谢谢Romi。最后做了这个-540*60;我会把这个标对的。