PHP检查是否过了1分钟总是返回false

时间:2018-02-05 02:56:14

标签: php

我无法检查时间。我使用此函数循环浏览数据库中的用户以检查每个用户以及时间是否已过1分钟。当我循环通过顶级用户(我)与当前时间相同时(1分钟没有通过)。其他用户是假的,他们的时间是今天早些时候(1分钟已经过去了)。但是我的函数每次都返回false。

public function checkOnline($username) 
{
    $user = $this->load->model('user')->getUser('username', $username);
    $last_active = strtotime($user['last_active']);

    var_dump(date('Y-m-d g:i:s', time()) .  ' ' . $user['last_active']);
    var_dump(time() .  ' ' . $last_active);

    if (time() - $last_active > 1 * 60) {
        echo 'false';
        return false;
    } else {
        echo 'true';
        return true;
    }
}

var转储返回第一个用户(我)返回此内容。

'2018-02-04 4:49:54 2018-02-04 4:49:54'
1517798994 1517755794

其他用户的var返回此值。

'2018-02-04 4:49:54 2018-02-04 3:09:03'
'1517798994 1517749743'

为什么我的函数总是返回false?

编辑:

这是我检查的循环

foreach ($users as $user) {
    if ($this->checkOnline($user['username']) === true) {
        $is_online = '<span class="text-green">Online</span>';
    } else {
        $is_online = '<span class="text-red">Offline</span>';
    }
}

输出:

C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04   5:53:57' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517759637' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:\path\UsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:\path\UsersController.php:125:string '1517802837 1517749743' (length=21)
false

1 个答案:

答案 0 :(得分:1)

您的问题源于一些错误的报告和/或日期存储。

您使用的地方

date('Y-m-d g:i:s', time())

“g”指的是

  

12小时格式的一小时没有前导零

现在,“2018-02-04 5:53:57”的当前时间似乎比你假设从数据库同时出现的时间提前了大约12小时。如果我不得不猜测,那实际上是在服务器上下午5:53。

当PHP从您的数据库中解析日期字符串“2018-02-04 5:53:57”时,它会假定24小时时间并将其解释为上午5:53。

如果您必须使用字符串(例如date('c')),我建议您坚持ISO 8601格式,或者更好的方法是将数据库中的日期存储为正确的日期/时间数据类型。

然后,代码中的数据库层应该理想地将它们转换为DateTime实例,这些实例非常容易与 diffs 一起使用。见PHP find difference between two datetimes