ОБСУЖДЕНИЕ

Вывод количества онлайн времени с базы

18 сообщений0 просмотровОткрыта
#1
Короче братцы, вопрос в том что я немогу сообразить как правильно вывести с базы количество времени проведеного пользователем)

корочь есть строка online таблицы users туда заносится время перебывания.
пробую выводить так:
echo ' На сайте провел:'; $tim=$us[online];
$sec = $tim % 60;
$min = $tim % 60;
$tim = floor($tim / 60);
echo $tim . "ч:" . $min . "м:" . $sec. "c";


нихера не правильно, воводит страшные числа)))
#2
юзай date
http://php.net/manual/en/function.date.php
#3
apolscky, Спс поюзаю. о еслиб я ещё английский знал).путин6.
#4
ADMINATOR, ru http://www.php.net/manual/ru/function.date.php
#5
apolscky, там нет ничего полезного, по крайней мере я не нашёл.путин.
#6
PHP
function time_autoformat($ts, $full = false){
  if($full){
        $d = ''; $t = $ts;
        $d1 = (floor($t/31622400)>0) ? floor($t/31622400) : '';
        $d2 = (floor($t/2635200)>0) ? floor($t/2635200) % 12 : '';
        $d3 = (floor($t/86400)>0) ? floor($t/86400) % 30 : '';
        $d4 = (floor($t/3600)>0) ? floor($t/3600) % 24 : '';
        $d5 = floor($t/60) % 60;
        if($d1) $d .= sklonen($d1,'год ','года ','лет ');
        if($d2) $d .= sklonen($d2,'месяц ','месяца ','месяцев ');
        if($d3) $d .= sklonen($d3,'день ','дня ','дней ');
        if($d4) $d .= sklonen($d4,'час ','часа ','часов ');
        if($d5) $d .= sklonen($d5,'минута  ','минуты ','минут ');
        return $d;
    } else {
        $sec = $ts;
        $min = round($ts/60);
        $hour = round($ts/3600);
        $days = round($ts/86400);
        $month = round($ts/2635200);
        $years = round($ts/31622400);    
        if($sec<60) return $sec.' сек.';    
        if($min<60) return $min.' мин.';    
        if($hour<24) return sklonen($hour,'час','часа','часов',false);    
        if($days<31) return sklonen($days,'день','дня','дней',false);    
        if($month<12) return sklonen($month,'месяц','месяца','месяцев',false); 
        else return sklonen($years,'год','года','лет',false);
    }
}    
 
function sklonen($n,$s1,$s2,$s3, $b = false){
    $m = $n % 10; $j = $n % 100;
    if($m==1) $s = $s1;
    if($m>=2 && $m<=4) $s = $s2;
    if($m==0 || $m>=5 || ($j>=10 && $j<=20)) $s = $s3;
    if($b) $n = '<b>'.$n.'</b>';
    return $n.' '.$s;
}
 
echo time_autoformat(1234, 1);
В данном примере на экран высветится “20 минут”. Второй параметр принимающий булево значение указывает, возвращать строку в сокращенном или в развернутом видеть, то есть полностью писать слова “минуты”, “часы” и др. принимая в расчет склонения.
Можно получить свой точный возраст вызвав типа такого: time_autoformat(time() – mktime(0, 0, 0, 8, 6, 1987), 1)
Это дата моего рождения, на момент написания статьи показывало: 25 лет 2 месяца 27 дней 7 часов 10 минут
#7
ого как запутано.путин2.
А как тогда выводить строку?
пробую так:
BASH
echo '('.time_autoformat($ank['online']).')';

показует: (316 лет).путин4.
#8
это с скрипта иного? там не в этом дело.остальное думай сам.
#9
MARAZM, да я понял уже.
спасиб.путин7.
#10
Юзай так
BASH
echo '('.time_autoformat($ank['online']).',1)';
#11
Хз там как у тя идет формировка переменной онлайна, точнее какое пишется туда значение..
Если там пишется просто время, когда юзер последний раз выполнил переход на сайте, тогда юзай
PHP
echo ' Юзера небыло на сайте ('.time_autoformat(time()-$ank['online'],1).')';[/php
#12
Valen, Заносится в базу так:
1)юзер лазит по сайту, при каждом обновлении страницы заносится +1 секунда, если юзер не обновил страницу, включается подсчёт времени. Если он обновил страницу до окончания отсчёта (300 секунд), то в базу заносятся те секунды которые насчитались...
Если страница не обновлялась 300 сек то в базу ни хера не заносится).путин4.
#13
ADMINATOR, Советую те убрать эту функцию..
Оно того не стоит, что бы трепать БД по 100500 раз на сек

ну а вообще, показал те пример как той функцией перевести время с вида 123432 в дни - часы-мин
#14
Valen, да, вывод крут)
Я короче функцию переписал. теперь подсчёт секунд идёт в другом порядке и запись проводится раз в 30 мин с момента активности до момента активности.
НУ мну ненужно прям точное время перебывания на сайте, правильно? там если + - час, то и хер с ним.))
#15
так у тя будет погрешность в итоге на много часов.. Раз на пол часа+второй,третий...
Убери и не мучайся
#16
~=Admin_Sheva=~,
CSS
$ d i f = t i m e ( ) - $ ank [ ' o n l i n e ' ] ;
$ s p e n d = $ ank [ ' t i m e s p e n d o n s i t e ' ] ;
i f ( $ d i f < 1 2 0 ) {
$ s p e n d = $ s p e n d + $ d i f ;
} e l s e {
$ s p e n d = $ s p e n d + 1 2 0 ;
} m y s q l _ q u e r y ( " u p d a t e ` u s e r  ` s e t ` t i m e s p e n d o n s i t e ` = ' " . $ s p e n d . " ' w h e r e i d = ' " . $ ank [ ' i d ' ] . " ' " );
#17
а вот вывод, только замени переменную $inf на свою,так понял $ank и в запросе к бд users на user вобщем разберешься
#18
PHP
306: $query = $db->sql_query ("select `timespendonsite` from `users` where
`id` ='".$inf[id]."' "); 307: 308: if(!mysql_error()) 309: { 310: $spend = mysql_result($db->sql_ query ("select * from `users` where `id`
='".$inf[id]."' "),0,'timespendonsite'); 311: 312: if($spend==true) 313: { 314: $onldays = ($spend>3600*24 ? intval ($spend/(3600*24)) : 0); // ДНИ 315: $d1 = $spend- ($onldays*3600*24); 316: $onlhours = ($d1 > 3600 ? intval($ d1/3600) : 0); // ЧАСЫ 317: $d2 = ($spend- ($onldays*3600*24)) -($onlhours*3600); 318: $onlmins = $d2>60 ? intval($d2/60) : 0; // МИНУТЫ 319: $onlsecs = (($spend- ($ onldays*3600*24))-($onlhours*3600)) - ($
onlmins*60); // СЕКУНДЫ 320: } 321: } 322: else 323: { 324: $db->sql_query ("ALTER TABLE `users` ADD `timespendonsite` INT( 15 )
NOT NULL"); 325: echo 'таблица обновлена<br / >обнови страницу<br />'; 326: } 327: 328: echo pole.'&#187; <u>Пробыл на сайте:</u> '.($onldays>0 ? $onldays.' дн.
':'').''.($onlhours>0 ? $onlhours.' ч. ':'').''.
($onlmins>0 ? $onlmins.' мин. ':'').''.($
onlsecs>0 ? $onlsecs.' сек. ':'').'<br/>'.div;