如果服务器时间少于数据库行时间戳

时间:2016-11-27 13:47:47

标签: php

我想设置一个禁止上诉时间,如果用户被禁止,我会在未来设置一个时间戳x小时或几天,并且只允许用户在存储的时间戳之后登录。

我使用php设置服务器时间,因此它遵循当地时间,只是为了确保人们不能将设备日期设置为晚些时间,然后是禁令上诉时间。

我有一列检查是否ban = 1,如果是,我想检查另一个名为ban_appeal的列,并将其与服务器的时间和日期进行比较。

//check if user is banned
if($row['ban'] == 1){
    if(if($server_date_time < $row['ban_appeal'])){
        $login_ok = false;
        die('
        <div class="error-msg">
            <i class="fa fa-times-circle"></i>
            This user has not activated their account yet.
        </div>
        ');
    }
}

//server time
date_default_timezone_set('Europe/Oslo');
$server_time = date('h:i a', time());
$server_date = strtotime(date("Y-m-d"));

我100%知道$ server_date_time没有设置,但那是因为我不知道如何设置它以匹配时间戳(2016-11-27 02:33:51

1 个答案:

答案 0 :(得分:1)

使用内置的PHP DateTime对象来处理不同格式的时间:

//server time
date_default_timezone_set('Europe/Oslo');
$server_date_time = new \DateTime();
$server_time = $server_date_time->format("h:i a");
$server_date = $server_date_time->format("Y-m-d");

//check if user is banned
if($row['ban'] == 1){
    // i'm expecting that ban_appeal date format is 2016-11-27 02:33:51
    $ban_date_time = \DateTime::createFromFormat("Y-m-d H:i:s", $row['ban_appeal']);

    if ($server_date_time < $ban_date_time) {
        $login_ok = false;
        die("User is banned until " . $ban_date_time->format("Y-m-d H:i:s"));
    }
}