2016-12-23 86 views
1

我想比較兩個日期,第一個是我的當前日期,第二個是從數據庫的日期。比較日期由php

當我看到他們兩人看起來完全相同,但PHP給了我另一個結果。我試圖使用像strcmp這樣的函數進行比較。我簡化了代碼,以便您更容易理解。

<?php 
$users_day = "20".date("y-m-d"); 
$looper = 0 ; 
$all_users_selection = mysql_query("SELECT * FROM user"); 
while($user_rows = mysql_fetch_array($all_users_selection)) 
{ 
    if($user_rows['user_lastseen'] != NULL) 
    { 
     //Getting user lastseen day and hour 
     $db_user_date[$looper] = substr(($user_rows['user_lastseen']) ,0 , 10); 
     $db_user_curr[$looper] = $user_rows['username']; 
     //Comparing day then hour 
     if (strcmp($users_day,$db_user_date[$looper]) != 0) 
     { 
      //Set offline 
      $current_user_update = mysql_query("UPDATE user SET user_status = 'offline' WHERE username = '$db_user_curr[$looper]'"); 
     } 
     $looper++; 
    } 
    ?> 

當我嘗試測試變量,例如echo $users_day;,它給我的2016-12-24(我目前的日期)。

而且當我從數據庫測試日期,它給了我與同類型比如我加了一個日期:

echo $db_user_date[$looper]; 

在我while loop並在某些情況下,日期是相同2016-12-24 當我測試echo strcmp($users_day,$db_user_date[$looper]); 它給我-10這意味着他們是100%不同,但他們不是!

有什麼想法?

+0

http://stackoverflow.com/q/3847736/5695475這是一個類似的問題,很多答案 – dading84

回答

4

將日期轉換爲時間,這是一個數值,然後比較它們。

$current = strtotime($users_day) 
$db_date = strtotime($db_user_date[$looper]) 

if($current > $db_date) 
{ 
    ... 
} 
+0

它的工作原理,謝謝! –

0

比較日期時,應該忽略它們的值,而不是它們的字符串表示。 字符串'01 Jan 2017'不等於字符串'2017-01-01',但日期實際上是相等的,對不對?

因此,您需要將兩個日期字符串轉換爲一種格式,以便您可以安全地進行比較。 Hicaro的答案很容易處理這個問題。

另外,考慮使用單個查詢替換這個代碼整個塊:

<?php 
mysql_query("UPDATE user SET user_status = 'offline' WHERE DATE(user_lastseen) <> CURDATE()"); 

所以你設定「離線」狀態,其user_lastseen所有用戶不等於今天(我認爲這是你想要達到的目標嗎?)。