Php 如何查找上次登录时间和当前时间之间的持续时间?

Php 如何查找上次登录时间和当前时间之间的持续时间?,php,time,Php,Time,我在谷歌上搜索解决方案并编辑了一些适合我想要的功能的部分。这就是它的样子: $query = "SELECT *from role,user WHERE user_name='$entered_username' AND PASSWORD = SHA1('$entered_password') AND user.role_id = role.role_id"; $result = mysqli_query($link, $query) or die(mysqli_error($link));

我在谷歌上搜索解决方案并编辑了一些适合我想要的功能的部分。这就是它的样子:

$query = "SELECT *from role,user WHERE user_name='$entered_username' AND PASSWORD = SHA1('$entered_password') AND user.role_id = role.role_id";
$result = mysqli_query($link, $query) or die(mysqli_error($link));

if (mysqli_num_rows($result) == 1) {
        $update = "UPDATE `user` SET last_login = NOW() WHERE user_name='$entered_username' ";
        $_SESSION['lastlog'] = $row['last_login'];


        $time = strtotime($_SESSION['lastlog']]);
        function humanTiming($time) {

            $time = time() - $time; // to get the time since that moment

            $tokens = array(
                31536000 => 'year',
                2592000 => 'month',
                604800 => 'week',
                86400 => 'day',
                3600 => 'hour',
                60 => 'minute',
                1 => 'second'
            );

            foreach ($tokens as $unit => $text) {
                if ($time < $unit)
                    continue;
                $numberOfUnits = floor($time / $unit);
                return $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '');
            }
        }
$query=“从角色中选择*用户,其中用户名=“$entered\u username”和密码=SHA1(“$entered\u PASSWORD”)和user.role\u id=role.role\u id”;
$result=mysqli_query($link,$query)或die(mysqli_error($link));
if(mysqli_num_rows($result)==1){
$update=“update`user`SET last\u login=NOW(),其中user\u name='$entered\u username';
$\u会话['lastlog']=$row['last\u login'];
$time=strottime($\会话['lastlog']]);
函数时间($time){
$time=time()-$time;//获取从该时刻开始的时间
$tokens=数组(
31536000=>“年”,
2592000=>“月”,
604800=>“一周”,
86400=>“天”,
3600=>“小时”,
60=>“分钟”,
1=>“秒”
);
foreach($unit=>$text形式的令牌){
如果($时间<$单位)
继续;
$numberOfUnits=楼层($time/$unit);
返回$numberOfUnits.'.$text.($numberOfUnits>1)?'s':'';
}
}
在html中

<?php
        if (isset($_SESSION['user_id'])) {
            if ($_SESSION['role_id'] == "Admin") {
                ?>
<?php echo 'You logged in ' . humanTiming($time) . ' ago'; ?>


尝试此操作后,它设法以小时为单位显示计算的时间。例如,“您在23小时前登录”。在我将用户注销,然后再次登录后,它只显示“您在23小时前登录”。即使在我注销后以秒为单位,它也没有显示时间。如何修复此问题?

我只是在编辑您的函数。我认为它的语法错误。希望这对您有所帮助:

 $time = "";
    $query = "SELECT *from role,user WHERE user_name='$entered_username' AND PASSWORD = SHA1('$entered_password') AND user.role_id = role.role_id";
    $result = mysqli_query($link, $query) or die(mysqli_error($link));

    if (mysqli_num_rows($result) == 1) {
            $update = "UPDATE `user` SET last_login = NOW() WHERE user_name='$entered_username' ";
            $_SESSION['lastlog'] = $row['last_login'];


            $time = strtotime($_SESSION['lastlog']]);
    }
            function humanTiming($time) {

                $time = time() - $time; // to get the time since that moment

                $tokens = array(
                    31536000 => 'year',
                    2592000 => 'month',
                    604800 => 'week',
                    86400 => 'day',
                    3600 => 'hour',
                    60 => 'minute',
                    1 => 'second'
                );
             $humanTime = "";
                foreach ($tokens as $unit => $text) {
                    if ($time < $unit)
                        continue;
                    $numberOfUnits = floor($time / $unit);
                    $humanTime .= $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '');
                }
                return $humanTime; //you should return string like this
            }
$time=”“;
$query=“从角色中选择*用户,其中用户名称=“$ENTERTED\U username”和密码=SHA1(“$ENTERTED\U PASSWORD”)和用户.role\U id=角色.role\U id”;
$result=mysqli_query($link,$query)或die(mysqli_error($link));
if(mysqli_num_rows($result)==1){
$update=“update`user`SET last\u login=NOW(),其中user\u name='$entered\u username';
$\u会话['lastlog']=$row['last\u login'];
$time=strottime($\会话['lastlog']]);
}
函数时间($time){
$time=time()-$time;//获取从该时刻开始的时间
$tokens=数组(
31536000=>“年”,
2592000=>“月”,
604800=>“一周”,
86400=>“天”,
3600=>“小时”,
60=>“分钟”,
1=>“秒”
);
$humanTime=“”;
foreach($unit=>$text形式的令牌){
如果($时间<$单位)
继续;
$numberOfUnits=楼层($time/$unit);
$humanTime.=$numberOfUnits.'.$text.($numberOfUnits>1)?'s':'';
}
return$humanTime;//应该像这样返回字符串
}
编辑:函数未返回任何字符串,因此未显示


问题:为什么在if语句中使用函数???我想你知道答案。

我只是在编辑你的函数。我认为它的语法错误。希望这对你有所帮助:

 $time = "";
    $query = "SELECT *from role,user WHERE user_name='$entered_username' AND PASSWORD = SHA1('$entered_password') AND user.role_id = role.role_id";
    $result = mysqli_query($link, $query) or die(mysqli_error($link));

    if (mysqli_num_rows($result) == 1) {
            $update = "UPDATE `user` SET last_login = NOW() WHERE user_name='$entered_username' ";
            $_SESSION['lastlog'] = $row['last_login'];


            $time = strtotime($_SESSION['lastlog']]);
    }
            function humanTiming($time) {

                $time = time() - $time; // to get the time since that moment

                $tokens = array(
                    31536000 => 'year',
                    2592000 => 'month',
                    604800 => 'week',
                    86400 => 'day',
                    3600 => 'hour',
                    60 => 'minute',
                    1 => 'second'
                );
             $humanTime = "";
                foreach ($tokens as $unit => $text) {
                    if ($time < $unit)
                        continue;
                    $numberOfUnits = floor($time / $unit);
                    $humanTime .= $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '');
                }
                return $humanTime; //you should return string like this
            }
$time=”“;
$query=“从角色中选择*用户,其中用户名称=“$ENTERTED\U username”和密码=SHA1(“$ENTERTED\U PASSWORD”)和用户.role\U id=角色.role\U id”;
$result=mysqli_query($link,$query)或die(mysqli_error($link));
if(mysqli_num_rows($result)==1){
$update=“update`user`SET last\u login=NOW(),其中user\u name='$entered\u username';
$\u会话['lastlog']=$row['last\u login'];
$time=strottime($\会话['lastlog']]);
}
函数时间($time){
$time=time()-$time;//获取从该时刻开始的时间
$tokens=数组(
31536000=>“年”,
2592000=>“月”,
604800=>“一周”,
86400=>“天”,
3600=>“小时”,
60=>“分钟”,
1=>“秒”
);
$humanTime=“”;
foreach($unit=>$text形式的令牌){
如果($时间<$单位)
继续;
$numberOfUnits=楼层($time/$unit);
$humanTime.=$numberOfUnits.'.$text.($numberOfUnits>1)?'s':'';
}
return$humanTime;//应该像这样返回字符串
}
编辑:函数未返回任何字符串,因此未显示


问题:为什么在if语句中使用函数???我想你知道答案。

通常很小的间隔显示为“刚刚”而不是“2秒前”。通常很小的间隔显示为“刚刚”而不是“2秒前”。