NOW()不能在DB中保存准确的时间:关闭2小时

时间:2013-11-04 02:49:47

标签: php mysql time

修改

事实证明,无法在共享服务器上更改数据库时区。

所以我需要使用 PHP来解决我的问题。任何想法如何去做?我应该简单地减去2小时到NOW()?


我的mysql数据库中保存的时间戳已关闭2小时

查询以保存事件:

$sql=query("INSERT INTO events (id, sender, time) VALUES ('','$id',NOW())");

这是我的数据库中的表events

id    sender          time
23     4        2013-11-03 18:57:47

问题是当事件发生时是下午4:57而不是下午6:57。

我该如何解决?

一些可能有用的细节:

date_default_timezone_get();输出欧洲/柏林。

我在加利福尼亚。

使用localhost进行开发时不会发生此错误。 仅限生产。

修改

当我运行SELECT @@global.time_zone, @@session.time_zone;时,它不会输出任何内容:

 @@global.time_zone   @@session.time_zone
      SYSTEM               SYSTEM

3 个答案:

答案 0 :(得分:2)

可能是数据库服务器位于不同的时区。例如,AWS DB服务器都使用UTC,并且无法更改它。解决此问题的唯一方法是在实例化数据库连接后手动设置时区。不确定这是否是你的问题,但它可能是一个解决方案。

SET time_zone = 'US/Eastern';

答案 1 :(得分:1)

您也可以使用PHP日期和时间:$phpDateTime = date('Y-m-d H:i:s');,然后在任何使用NOW()的地方使用$ phpDateTime。只要PHP具有正确的时区设置(您可以动态执行),这将正常工作。

答案 2 :(得分:0)

你现在可以使用php变量():

$date = date('Y-m-d H:i:s');
$sql=query("INSERT INTO events (id, sender, time) VALUES ('','$id','$date')");

you also can add timezone at you php before $date = date('Y-m-d H:i:s');
Date_default_timezone_set('America/Los_Angeles');