NOW()函数没有保存当前服务器的时区,它使用UNIX时间戳增加了8个小时

时间:2015-09-04 14:55:01

标签: php mysql

突然,NOW()函数停止了保存服务器的时间,现在我使用'time ago'实现打印数据一团糟。这很奇怪。

我的服务器时间(主机和MySQL)是格林尼治标准时间-07:00(早上7:45)。 我现在的时间是:格林威治标准时间东部夏令时间(上午10:45)-04:00。

我已经使用本地功能证实了服务器的时间。

如果我使用NOW()保存了一些内容,则该字段中的时间为(2015-09-04 15:45:40)...它提前8小时,我不知道为什么,它工作正常。< / p>

所以,现在我想知道解决这个问题的最佳方法是什么?谢谢你的任何建议。

更新

我刚刚发现服务器正在使用UNIX时间戳来保存数据库。

So, my current time: -04:00 (13:48)
Server current timezone -07:00 (10:48)
Server UNIX timestamp: GMT (17:48)

不确定此信息是否有助于找到解决方案。我希望它使用服务器当前时区保存内容。

更新2

到目前为止,只找到解决方案是使用date函数而不是使用托管服务器时间的NOW(),而不是数据库。

$today = date("Y-m-d H:i:s");

这意味着在我使用的所有脚本中进行更改NOW() ... geez!

2 个答案:

答案 0 :(得分:3)

如指出here

  1. 检查my.cnf部分的default_time_zone='+00:00'

  2. 执行此查询SELECT @@global.time_zone;,并根据需要更改值

  3. SET GLOBAL time_zone = '+8:00'; SET GLOBAL time_zone = 'Europe/Helsinki'; SET @@global.time_zone='+00:00';

    1. 执行此查询SELECT @@session.time_zone;,并根据需要更改值
    2. SET time_zone = 'Europe/Helsinki'; SET time_zone = "+00:00"; SET @@session.time_zone = "+00:00";

答案 1 :(得分:2)

尝试在您的脚本顶部添加date_default_timezone_set,然后使用date代替NOW()

date_default_timezone_set('Europe/London');
echo date('Y-m-d H:i:s');