php检查是否过去1分钟始终返回false



我很难检查时间。我使用此功能在数据库中循环浏览用户以检查每个功能,以及时间是否过去1分钟。当我浏览顶级用户(ME(时,与当前时间相同(1分钟尚未通过(。其他用户是假的,他们的时间是从今天早些时候开始的(1分钟已经通过了(。但是,我的功能每次都会返回错误。

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转储返回第一个用户(me(返回此。

'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:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04   5:53:57' (length=37)
C:pathUsersController.php:125:string '1517802837 1517759637' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false
C:pathUsersController.php:124:string '2018-02-04 5:53:57 2018-02-04 3:09:03' (length=37)
C:pathUsersController.php:125:string '1517802837 1517749743' (length=21)
false

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

在哪里使用

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

" g" 是指

一个小时的12小时格式,没有引导零

现在,您目前的" 2018-02-04 5:53:57" 似乎比您假设与DB同一时间提前12个小时。如果我不得不猜测,实际上是您的服务器上的下午5:53。

当PHP解析日期字符串" 2018-02-04 5:53:57" 从您的DB中,它假设24小时时间并将其解释为5:53 AM。

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

您代码中的DB层应理想地将其转换为DateTime实例,这些实例非常容易与 diffs 一起使用。请参阅php查找两个数据时的差异

最新更新