2014-10-08 4 views
0

У меня есть сценарий для сравнения даты/времени входа в систему и даты/времени выхода из системы, после чего разница между этими двумя значениями добавляется в столбец общего времени в таблице MSSQL 2005. Например: если пользователь находится в сети всего несколько секунд, он добавит, например, значение около 98 unix timestamp. Итак, как отобразить это значение на веб-сайте как чтение человека: дни/минуты/секунды, если это возможно?Как рассчитать временную метку unix в днях/минутах/секундах?

Большое спасибо за проверку моего вопроса. Мы будем очень благодарны за помощь.

Это мой ранг сценарий, где я хочу, чтобы включить, что:

function TotalTimeRank() 
{ 
    $db = $this->database[GDB]; 
    $num_rows = $db->doQuery('SELECT TOP 100 ID, Name, (SELECT SUM(CoolPoint) FROM DATA WHERE DATA.User = INFO.User AND DATA.Auth IN(1, 2)) as Points FROM INFO WHERE INFO.User NOT IN (1199,16300) ORDER BY Points DESC'); 
    if ($num_rows == -1) 
    { 
     $db->getError(); 
     return; 
    } 

    $n = 1; 
    $content = ''; 
    while ($row = $db->doRead()) 
    { 
     $data = array('rank-id' => $row['Num'], 'rank-pos' => $n++, 'rank-name' => $row['Name'], 'rank-points' => number_format(intval($row['Points']))); 
     $content .= Template::Load('pointrank-' . ($n % 2 == 1 ? 2 : 1), $data); 
    } 

    $this->content = Template::Load('total_pointrank', array('ranks' => $content)); 
} 

Итак, что это лучший способ, чтобы включить то, что я хочу, чтобы мой ранг сценария выше, так что я могу отобразить общее время онлайн для каждого пользователя на основе столбец totaltime в моей таблице data? Я знаю, как включить его, но я смутился, как преобразовать его в чтение человеком в этой функции выше.

+0

Вы используете php? –

+0

Да, обновил мое сообщение со сценарием, который я хочу включить в общее время. – MobEn

+0

это может вам помочь: http://stackoverflow.com/questions/2059603/php-function-to-convert-unix-timestamp-into-minutes-or-hours-or-days-like-digg –

ответ

1

Это должно удовлетворить ваши потребности:

$timestamp_diff = 456; // your timestamp difference here 
echo secondsToTime($timestamp_diff); 

и эту функцию:

function secondsToTime($seconds) { // returns days/hours/minutes/seconds 
    $dtF = new DateTime("@0"); 
    $dtT = new DateTime("@$seconds"); 
    return $dtF->diff($dtT)->format('%a/%h/%i/%s'); 
} 

, основанный на this

Edit: положить все это вместе с существующим сценарием: (I догадаться?)

function TotalTimeRank() 
{ 
    $db = $this->database[GDB]; 
    $num_rows = $db->doQuery('SELECT TOP 100 ID, Name, (SELECT SUM(CoolPoint) FROM DATA WHERE DATA.User = INFO.User AND DATA.Auth IN(1, 2)) as Points FROM INFO WHERE INFO.User NOT IN (1199,16300) ORDER BY Points DESC'); 
    if ($num_rows == -1) 
    { 
     $db->getError(); 
     return; 
    } 

    $n = 1; 
    $content = ''; 
    while ($row = $db->doRead()) 
    { 
     $data = array('rank-id' => $row['Num'], 'rank-pos' => $n++, 'rank-name' => $row['Name'], 'rank-points' => $this->secondsToTime(intval($row['Points']))); 
     $content .= Template::Load('pointrank-' . ($n % 2 == 1 ? 2 : 1), $data); 
    } 

    $this->content = Template::Load('total_pointrank', array('ranks' => $content)); 
} 

function secondsToTime($seconds) { // returns days/minutes/seconds 
    $dtF = new DateTime("@0"); 
    $dtT = new DateTime("@$seconds"); 
    return $dtF->diff($dtT)->format('%a/%i/%s'); 
} 
+0

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

+0

Я только что отредактировал с добавлением вашего скрипта – Yoric

+0

Спасибо, классный. Я немного отредактировал его, чтобы включить свой собственный формат и т. Д. Это очень ценно, и ответ на 100% принят. Еще раз спасибо! – MobEn

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