2012-07-04 231 views
0

之間的差異我已經創建了註冊頁面,當用戶單擊提交按鈕時,激活鏈接被髮送到他的電子郵件,因此時間戳存儲在數據庫中。如果用戶點擊激活鏈接,我必須在24小時之前或之後檢查該鏈接是否被點擊。 我的代碼: -計算時間戳

function confirmEmail($activation_code){ 
     $this->load->database(); 
     $this->load->helper('date'); 
     echo "activation link will be checked and accordingly flag will be set."; 
     $activation_sent_timestamp=$this->db->query("SELECT activation_timestamp FROM tbl_user_registration WHERE email_verification_code='$activation_code'"); 
     foreach($activation_sent_timestamp->result() as $res){ 
      $activation_time_from_db=$res->activation_timestamp; 
     } 
     echo $activation_time_from_db."\n\r"; 
     $now = time(); 
     $human = unix_to_human($now); 
     echo $human; 
     $difference = ($human-$activation_time_from_db); 
     if($difference < 24) { 
       echo "correct" 
     } 
     else echo "Link expired"; 
    } 

我正在使用codeigniter。我怎麼能這樣做,這段代碼沒有顯示任何錯誤,但我不知道這是計算24小時的正確方法,我正在檢查,但沒有得到任何東西。請檢查代碼。

解決........ :)

+0

建議:我總是儘量保持PHP的日期和MySQL的日期分開,因爲有時存在不匹配。如果您使用NOW()插入數據,則在INTERVAL 1天內使用DATE_ADD和DATE_SUB。如果field是datetime,則使用UNIX_TIMESTAMP()將其轉換。如果您插入'time()',則可以使用strtotime('+ 1 day')。 – Waygood

回答

1

unix_to_human()只是返回時間戳的人類可讀形式

最簡單的方法是,找到兩個時間戳之間的差,則轉換爲小時,並檢查是否少於24小時

+0

您正在說做'$ sent_time = human_to_unix($ activation_time_from_db); $ now = time(); echo($ now- $ sent_time);' 如何將這段時間變成小時..? – avinashse

+1

我將它除以3600 – avinashse

0

您可能需要使用date_diff

在這裏看到:DATE_DIFF()

0

您可以使用差異的計算差異,你也可以更改時間格式

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%R%a days'); 
0

將兩個時間戳轉換爲php 日期(「YM-d」)然後格式嘗試date_diff

0
$time = time(); 

$seconds = 86400 // seconds of 24 Hours 

SELECT * FROM tbl_user_registration WHERE ($time - UNIX_TIMESTAMP(activation_timestamp) >= $seconds) 
+0

Showqing'未定義的屬性:stdClass :: $ activation_timestamp'錯誤。 :( – avinashse

+0

activation_timestamp是您的表格列的名稱 if(count($ activation_sent_timestamp-> result())){//您的過期鏈接} – Alireza41