我在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
答案 0 :(得分:1)
就像菲利普所说,这可能是一个时区问题;您可以将脚本的时区更改为MySQL设置的任何时区,如下所示:
date_default_timezone_set('America/Los_Angeles');
答案 1 :(得分:1)
为避免此类问题,请检查以下事项。
system time
和system timezone
相同。 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:56
,NOW()
给了2014-01-04 20:58:56
感谢所有贡献者,这不是@AbdulJabbarWebBestow提到的时区问题
再次感谢