同步MySQL和PHP时间

时间:2013-03-16 17:36:00

标签: php mysql sql timezone

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

'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 个答案:

答案 0 :(得分: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转换一次。

答案 1 :(得分:1)

您肯定希望在应用程序/数据库中使用单个时区。如果您在向用户显示时不得不喜欢更改数据的时区(不在数据库或您的php默认tz中),那么只有在您要显示它之前才这样做。否则,使用单个时区。我更喜欢GMT

设置mysql服务器时区:在my.conf中 有这样的事情:default-time-zone='GMT' 然后重启mysql 见:http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

对于php,在每个页面顶部的某个位置,您应该执行以下行:

date_default_timezone_set("GMT");