0

编辑:

事实证明,在共享服务器上更改数据库时区是不可能的。

所以我需要使用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
4

3 回答 3

2

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

SET time_zone = 'US/Eastern';
于 2013-11-04T03:19:42.860 回答
1

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

于 2013-11-04T04:41:45.353 回答
0

您可以使用 php 变量 now() :

$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'); 
于 2013-11-04T08:33:13.610 回答