修改
事实证明,无法在共享服务器上更改数据库时区。
所以我需要使用 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
答案 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');