php和mysql的日期时差

时间:2014-01-04 19:04:22

标签: php mysql datetime

我在php中这样做,将lastlogin存储在mysql datetime列中

date('Y-m-d h:i:s') //which then gave > '2014-01-04 08:00:56'

然后保存

当我需要计算在线时间超过20分钟的用户时,我在mysql

中做了这个
SELECT * FROM `elc_users`  WHERE TIMESTAMPDIFF( MINUTE , lastlogin, NOW( ) ) <20

它没有用,当我在mysql中追踪时,Now()给了这个&gt; 2014-01-04 20:00:56

现在这不会让我在20分钟内登录用户。

我该如何解决这个问题?

修改

我在phpMyAdmin中手动插入了一条记录,为了确保timestamp列中的时区问题具有默认值current_timestamp,它给出了2014-01-05 06:48:21。我在phpMyAdmin中运行了这个查询

SELECT created, NOW( )  `elc_users`

这给了2014-01-05 18:53:53

现在我还执行下面的代码来检查全局和会话时区,我得到了phpMyAdmin

mysql> SELECT @@global.time_zone, @@session.time_zone;

然后给了SYSTEM | SYSTEM

4 个答案:

答案 0 :(得分:1)

就像菲利普所说,这可能是一个时区问题;您可以将脚本的时区更改为MySQL设置的任何时区,如下所示:

date_default_timezone_set('America/Los_Angeles');

答案 1 :(得分:1)

为避免此类问题,请检查以下事项。

  1. 确保数据库服务器和应用服务器的system timesystem timezone相同。
  2. 确保已设置PHP和MySQL的配置以采用适当的时区。
  3. 始终使用单个函数设置更新,插入其中包含dateTime字段的行。就个人而言,我建议您在代码中的某处编写一个通用函数,并且每当需要获取当前时间时,使用该函数,而不是使用MySQL的NOW()

答案 2 :(得分:0)

我不认为这会是一个时区问题,因为PHP和MySQL都在同一台机器上运行,所以两者都会在调用当前日期时获得相同的时间。也许你可以尝试这个,因为我在你的机器上试过这个,就像你说的那样。

SELECT * FROM `elc_users` WHERE lastlogin < date_add(NOW(), INTERVAL -20 MINUTE) 

答案 3 :(得分:0)

我通过删除日期列并再次创建它来解决了这个问题。 现在以正确的格式记录时间

timestamp给了2014-01-04 20:58:56NOW()给了2014-01-04 20:58:56

感谢所有贡献者,这不是@AbdulJabbarWebBestow提到的时区问题

再次感谢