【问题标题】:php and mysql date time differencephp和mysql日期时间差
【发布时间】:2014-01-22 09:46:18
【问题描述】:

我在 php 中这样做是为了将 lastlogin 存储在 mysql 日期时间列中

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() 给了这个> 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

【问题讨论】:

  • 可能你的mysql服务器有不同的时区。
  • 这是在我的开发机器上,好的,我怎样才能避免这个时区差异
  • @FilipGórny 请查看编辑

标签: php mysql datetime


【解决方案1】:

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

date_default_timezone_set('America/Los_Angeles');

【讨论】:

  • 如何在生产服务器中检测到这一点?或者如果我在 php 中设置它会影响 mysql
  • select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00')); 应该为您返回 mysql 时区
  • 另一种“hacky”方式是在查询中使用 php date 而不是 mysql NOW()
【解决方案2】:

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

  1. 确保 DB Server 和 Application Server 的 system timesystem timezone 相同。
  2. 确保您已将 PHP 和 MySQL 的配置设置为采用正确的时区。
  3. 始终使用单个函数来设置更新,插入包含dateTime 字段的行。就个人而言,我建议您在代码中的某处编写一个通用函数,当您需要获取当前时间时,使用该函数,而不是使用 MySQL 的 NOW()

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • +1 表示时区问题,因为 PHP 和 MySQL 都在同一台机器上运行。我不知道查询,但我遇到了类似的事情,正如@Abdul Jabbar WebBestow 所说,这不是 PHP 和 MySQL 的时区差异
    • @JohnSmith 谢谢,您可以通过 select date_add(NOW(), INTERVAL -20 MINUTE) 检查查询,因为它会给您从当前时间开始的 -20 分钟,因此意味着它将提供那些记录在过去 20 分钟内登录。
    • 登录超过20分钟
    • @AbdulJabbarWebBestow 为什么时代不同?
    【解决方案4】:

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

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

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

    再次感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      相关资源
      最近更新 更多