2016-11-27 99 views
-1

我想设置一个禁止上诉时间,如果用户被禁止,我将在未来设置时间x个小时或几天,并且只允许用户在存储的时间戳之后登录。如果服务器时间少于数据库行时间戳

我使用php设置服务器时间,所以它跟随当地时间,只是为了确保人们不能将他们的设备日期设置为以后的日期然后禁令上诉时间。

我有1列,检查是否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心不是一套的,但就是因为IM不知道我应该如何设置它匹配时间戳(2016-11-27 02:33:51

+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")); 
    } 
}