同步PHP和MySQL时区

时间:2015-04-10 00:23:37

标签: php mysql date datetime timezone

通过使用此代码,我通过PHP获得的时区为UMT

$timezone = date_default_timezone_get(); // UTC
echo "The current server timezone is: " . $timezone."<br />";
echo date('Y-m-d H:i:s');   //  2015-04-10 00:08:05

和MySQL给我pkt作为我的系统时区和时间2015-04-10 05:14:38

SELECT @ @system_time_zone // pkt
SELECT NOW( ) , UNIX_TIMESTAMP( NOW( ) ) // 2015-04-10 05:14:38

由于时差,我无法使用PHP从我的数据库中获取正确的记录。

如何同步PHP和MySQL时区,以便两者同时返回?

是否可以使用PHP更改MySQL的时区?

我尝试了this,但我收到了这个错误:

Warning: PDO::__construct(): The server requested authentication method unknown to the client

2 个答案:

答案 0 :(得分:0)

您可以使用mysql的功能

CONVERT_TZ(timestamp_field,[mysql_timezone],[php_timezone])

或者在php中更改服务器时区:

date_default_timezone_set([timezone]);

php date_default_timezone_set

或者更改mysql时区:

SET GLOBAL time_zone = [timezone]

该语句将更改mysql的时区,但如果重新启动服务器,它将使用默认时区。 您可以在启动时设置默认时区,这里是链接: Set default timezone mysql

希望有所帮助

答案 1 :(得分:0)

我的网站需要以非常复杂的方式在mysql和PHP之间进行同步。该网站提供演示系统 - 或 - 全球任何地方的完整用户在线办公室。服务器位于美国东部时间,我在澳大利亚EST。用户可以在任何地方。因此,USER LogIn可以来自任何地方。考虑到这一点,我无法设置MySQL或PHP时区,因为USER可能位于欧洲/伦敦,但服务器是US / Eastern。为了解决这个问题,我发现在将数据加载到MySQL表时我不能使用NOW(),CURDATE()或任何其他MySQL函数。因此,我使用的每个PHP程序都有一个标题,它设置适当的时区PLUS变量,以满足我通常使用的任何MySQL函数。当将MySQL数据加载到表中时,我使用PHP变量而不是MySQL函数:
$mytime = date("Y:m:d h:m:s"); // for MySQL NOW() $myymd = date(""); // for MYSQL CURDATE()

这非常繁琐但确保加载到MySQL的任何日期/时间与程序在下次由该TIMEZONE加载时所期望的程序同步。当USER为其数据库使用任何PHP程序/脚本时,该USER的时区始终在PHP中设置:

date_default_timezone_set([timezone]);

作为USER LogIn过程的一部分。