2012-03-08 283 views
2

我想知道一個良好和有效的方式能夠告訴多久以前我的用戶最後登錄。PHP最後登錄腳本

在用戶簡介欲它說多久以前的最後一個日誌在中。

如:

用戶1個 最後登錄:2小時前

用戶2 上次登錄:3分鐘前

用戶3 上次登錄:2個月前


我會將他們最後的登錄信息保存在MySQL數據庫中,但想知道如何執行該腳本。

我剛剛意識到Stackoverflow使用此功能,以便可以幫助您瞭解我想要什麼。


mysql_query("UPDATE users SET lastactivity = ".time()." WHERE id = ".$userID); 

這是我將更新數據庫。

+0

你有什麼試過?堆棧溢出應該用於特定問題。你應該使用谷歌。 – evasilchenko 2012-03-08 14:49:17

+0

我曾經試過它,我只是想要一個更快的方法來做到這一點,然後我會。我的腳本太長了。 – 2012-03-08 14:50:36

回答

7

每個頁面請求只是更新他們的最後一次活動。

<?php 

mysql_query("UPDATE users SET lastactivity = ".time()." WHERE id = ".$userID); 

顯示當他們最後上線,剛剛從數據庫中選擇自己lastactivity領域,並顯示它

<?php 
$activity = mysql_result(mysql_query("SELECT lastactivity FROM users WHERE id = ".$userID), 0); 
echo "Last activity: ".relativeTime($active); 

其中relativeTime()是功能我一直在使用:

function relativeTime($time, $short = false){ 
    $SECOND = 1; 
    $MINUTE = 60 * $SECOND; 
    $HOUR = 60 * $MINUTE; 
    $DAY = 24 * $HOUR; 
    $MONTH = 30 * $DAY; 
    $before = time() - $time; 

    if ($before < 0) 
    { 
     return "not yet"; 
    } 

    if ($short){ 
     if ($before < 1 * $MINUTE) 
     { 
      return ($before <5) ? "just now" : $before . " ago"; 
     } 

     if ($before < 2 * $MINUTE) 
     { 
      return "1m ago"; 
     } 

     if ($before < 45 * $MINUTE) 
     { 
      return floor($before/60) . "m ago"; 
     } 

     if ($before < 90 * $MINUTE) 
     { 
      return "1h ago"; 
     } 

     if ($before < 24 * $HOUR) 
     { 

      return floor($before/60/60). "h ago"; 
     } 

     if ($before < 48 * $HOUR) 
     { 
      return "1d ago"; 
     } 

     if ($before < 30 * $DAY) 
     { 
      return floor($before/60/60/24) . "d ago"; 
     } 


     if ($before < 12 * $MONTH) 
     { 
      $months = floor($before/60/60/24/30); 
      return $months <= 1 ? "1mo ago" : $months . "mo ago"; 
     } 
     else 
     { 
      $years = floor ($before/60/60/24/30/12); 
      return $years <= 1 ? "1y ago" : $years."y ago"; 
     } 
    } 

    if ($before < 1 * $MINUTE) 
    { 
     return ($before <= 1) ? "just now" : $before . " seconds ago"; 
    } 

    if ($before < 2 * $MINUTE) 
    { 
     return "a minute ago"; 
    } 

    if ($before < 45 * $MINUTE) 
    { 
     return floor($before/60) . " minutes ago"; 
    } 

    if ($before < 90 * $MINUTE) 
    { 
     return "an hour ago"; 
    } 

    if ($before < 24 * $HOUR) 
    { 

     return (floor($before/60/60) == 1 ? 'about an hour' : floor($before/60/60).' hours'). " ago"; 
    } 

    if ($before < 48 * $HOUR) 
    { 
     return "yesterday"; 
    } 

    if ($before < 30 * $DAY) 
    { 
     return floor($before/60/60/24) . " days ago"; 
    } 

    if ($before < 12 * $MONTH) 
    { 

     $months = floor($before/60/60/24/30); 
     return $months <= 1 ? "one month ago" : $months . " months ago"; 
    } 
    else 
    { 
     $years = floor ($before/60/60/24/30/12); 
     return $years <= 1 ? "one year ago" : $years." years ago"; 
    } 

    return "$time"; 
} 
+0

我知道,但我想告訴我他們多久以前見過。 – 2012-03-08 14:49:10

+0

答案只是簡單!但是你忘記了PHP結束標籤。 :-P – 2012-03-08 14:53:23

+0

你應該在php手冊中閱讀'DateTime:diff'和'DateInterval'。 – 2012-03-08 14:54:21

0

在除了@Martin。說,您可以使用time()獲取當前時間戳,然後從數據庫中檢索最後一次登錄時間戳,並從當前時間戳中減去它。

<?php 

$date = strtotime("2012-03-08 16:02:35"); 
$now = time(); 
$diff = $now - $date; 

?> 

...然後$diff是以秒爲單位的時間差。然後你可以計算任何你想要的。