2012-03-08 3 views
2

Я хотел бы знать, хороший и эффективный способ быть в состоянии сказать, как давно моих пользователей последнего входа в систему.PHP последнего журнала в сценарии

На пользователей профиль я хочу его сказать, как давно их последний журнал в был.

Например:

Пользователь 1 Последний Логин: 2 часа назад

Пользователь 2 Последний Логин: 3 минуты назад

Пользователь 3 Последний Логин: 2 месяца назад


Я буду хранить их последние данные для входа в базу данных MySQL, но хочу знать, как это сделать.

Я только понял, что Stackoverflow использует эту функцию, чтобы помочь вам понять, чего я хочу.


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

Это, как я буду обновлять БД.

+0

Что вы пробовали? Переполнение стека должно использоваться для конкретных вопросов. Вместо этого вы должны использовать Google. – evasilchenko

+0

Я еще не попробовал, я просто хочу, чтобы это было быстрее, и я бы это сделал. Мой скрипт был бы слишком длинным. –

ответ

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

Я знаю это, но я хочу сказать, как давно они были замечены. –

+0

Ответ столь же короткий, как легко! Но вы забыли тег закрытия PHP. :-P –

+0

Вы должны прочитать о «DateTime: diff» и «DateInterval» в руководстве по php. –

0

В дополнение к тому, что @Martin. сказал, вы можете получить текущую временную метку с помощью time(), а затем получить последнюю метку времени входа из базы данных и вычесть ее из текущей временной метки.

<?php 

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

?> 

... тогда $diff - разница во времени в секундах. Затем вы можете рассчитать все, что хотите.

Смежные вопросы