2012-03-06 63 views
2

我存储在格林尼治标准时间的MySQL数据库的一些日期。
假设客户的时区偏移量是-540;我将如何更正来自数据库的datetime以反映这一点?是否有一个方便的功能,我可以通过日期,或者我需要相应地添加或减少。PHP添加或减少时区偏移

+0

使用'timestamp'的MySQL数据类型和mysql会为你做那个 – zerkms 2012-03-06 08:47:10

+0

Ho它能做到吗?它确实不知道客户的时区。我想它会根据服务器时区来做它没有?我全是耳朵 - 谢谢。 – Chin 2012-03-06 08:48:21

+0

你可以为每个连接设置客户端时区,并且mysql会为你做所有的偏移工作。关于SO – zerkms 2012-03-06 10:02:58

回答

3

既然你已经在格林尼治标准时间格式的数据的项目,你必须将它们转换为时间标记,使用strtotime,这里更多的信息:http://php.net/manual/en/function.strtotime.php 一旦你有时间戳记,你可以减去偏移量(540次60秒)从它,然后将结果转换为一个新的日期字符串,使用date,这里更多的信息:http://php.net/manual/en/function.date.php

下面是代码,可能这一个版本:

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

,这里有数百万次讨论。谢​​谢 - 我将字段更改为数据库中某种时间戳的优点和缺点。在这一点上,如果它能更好地为我服务,这是一个选择。 – Chin 2012-03-06 09:05:04

+0

我认为我们正处于正确的轨道上。但上面的代码需要9分钟而不是9小时。 – Chin 2012-03-06 09:13:45

+0

在我的头顶,我必须说一个con会是在整个项目中显示它们的事实,您将不得不将时间戳转换为日期字符串,但我想不出任何其他缺点。赞成,你可以很容易地按日期排序行,因为时间戳基本上是数字。你可以使相对计算更容易,就像你最初的问题一样。希望这可以帮助。 – 2012-03-06 09:14:59

3

也许这个片段将帮助您:

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

http://www.php.net/manual/en/class.datetime.php有关进一步的读数。