2013-03-16 65 views
2

我正在尝试同步我的PHP和MySQL时间。目前,时代不同了(如下输出):同步MySQL和PHP时间

'SELECT CURRENT_TIMESTAMP' returns '2013-03-16 13:14:28' 
'date('Y-m-d g:i:s')'  returns '2013-03-16 10:14:28' 

我已经成功,从其他用户阅读,使用SET time_zone='-7:00';改变MySQL的时间。问题是基于用户位置的不同查询时间会发生变化,我宁愿不更改每个查询的time_zone

我应该只设置一次time_zone,使其与服务器的时间相同,然后根据用户的时区在PHP中更改时间?或者有更好的方法去解决这个问题吗?

预先感谢您!

回答

2

如果我只是设置TIME_ZONE一次,使得它同时作为服务器,然后更改基于用户的PHP中时区的时间?或者有更好的方法去解决这个问题吗?

是的。由于夏令时间的限制,您也不应通过GMT时区设置时区。你可以编写自己的函数来设置date_default_timezone_set('UTC');然后到用户的时区。

$time = strtotime('2013-03-16 13:14:28'.' UTC'); 
echo date('Y-m-d g:i:s',$time); //2013-03-16 9:14:28 

另一种替代方法是在“Unix时间”中存储mysql时间,然后使用PHP转换一次。

+0

哦,我喜欢将它们存储在Unix Time中然后每次都进行转换的想法。谢谢! – doitlikejustin 2013-03-16 19:13:26

1

您绝对想在您的应用程序/数据库中使用单个时区。如果你必须在显示给用户时需要改变数据的时区,那么只需要改变数据的时区(而不是数据库或者你的php默认的tz) - 然后在你要显示它之前只做这些。否则,请使用单个时区。我喜欢GMT

设置MySQL服务器时区:在my.conf 已经somehthing这样的:default-time-zone='GMT' ,然后重新启动mysql的 见:http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

对于PHP,在每一个你应该页面的顶部某处执行这一行:

date_default_timezone_set("GMT"); 
+0

怎么去做正确的日期已经设置在数据库中设置了不正确的时区? – doitlikejustin 2013-03-16 18:41:16

+0

您需要使用适当时区中的日期更新数据库中的任何日期。如果你知道以前的时区是什么,你只能这样做。 UPDATE db.table set'date' = CONVERT_TZ('date','old tz','GMT') – Tucker 2013-03-16 18:47:33

+0

感谢您提供转换日期的提示! – doitlikejustin 2013-03-16 19:13:52