Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Смещение серверного времени
 
 автор: korefan   (24.10.2006 в 19:32)   письмо автору
 
 

Модуль статистики моего движка некорректно отображает число хитов в связи с тем, что сервер хостера в США и на Тихоокеанском времени, т.е. разница во времени 11 часов. Когда у них 23:00 этого дня, у нас (Московское время) уже 10:00 следующего дня. Соответственно, в 10:00 утра этого дня мне показывается число хитов по состоянию на 23:00 предыдущего дня.
Кажется решил проблему так:

<?php 
$Today 
getdate();
//Formatting Current Date
$month $Today['month'];
$mday $Today['mday'];
$year $Today['year'];
$sm = ( 39600 );  // Разница во времени в сек.

// Hits
$t_time time()+$sm;
$t_year date("Y"$t_time);
$t_month date("n"$t_time);
$t_date date("j"$t_time);

//Formatting Previous Day
$pmday $t_date-1;

print 
date"j.m.Y H:i:s" time() + $sm);

//Hits Today
$result $db->sql_query"SELECT hits FROM ".$prefix."_stats_date WHERE year='$t_year' AND month='$t_month' AND date='$t_date'" );
list(
$today) = $db->sql_fetchrow$result );
$content .= "<b>$today</b><br>\n";

//Hits Previous Day
$result $db->sql_query"SELECT hits FROM ".$prefix."_stats_date WHERE year='$t_year' AND month='$t_month' AND date='$pmday'" );
list(
$yesterday) = $db->sql_fetchrow$result );
$content .= "<b>$yesterday</b><br>\n";

//Hits Total
$result $db->sql_query("SELECT count from ".$prefix."_counter order by type desc");
list(
$total) = $db->sql_fetchrow($result);
$content .= "<b>$total</b>\n";

?> 


Но есть еще одна проблема: как проделать такое в модуле отображения ежечасной статистики. Там слева в таблице показано время построчно в формате 00:00-00:59........23:00-23:59, а напротив число хитов за каждый период времени.
Как там "прикрутить" разницу во времени, ума не приложу. Я в php чайник, заранее прошу прощения и помощи.
Вот исходный код модуля:

<?php

$now 
date("d-m-Y");
$dot explode ("-",$now);
$nowdate $dot[0];
$nowmonth $dot[1];
$nowyear $dot[2];

function 
Stats($total) {
    global 
$hlpfile,$nowyear,$nowmonth,$nowdate,$nowhour$sitename$startdate$prefix$db$now$module_name;
    
$row $db->sql_query("SELECT count from ".$prefix."_counter order by type desc");
    list(
$total) = $db->sql_fetchrow($row);
    
$total++;
    
OpenTable();
    
$row4 $db->sql_fetchrow($db->sql_query("SELECT year, month, date, hour, hits from ".$prefix."_stats_hour order by hits DESC limit 0,1"));
    
$year intval($row4['year']);
    
$month intval($row4['month']);
    
$date intval($row4['date']);
    
$hour intval($row4['hour']);
    
$hits intval($row4['hits']);
    
    if (
$hour 10) {
        
$hour "0$hour:00 - 0$hour:59";
    } else {
        
$hour "$hour:00 - $hour:59";
    }
    echo 
"<BR><BR>";
    
showHourlyStats($nowyear,$nowmonth,$nowdate);
    
CloseTable();
}

function 
showHourlyStats($year,$month,$date){
    global 
$prefix,$bgcolor1,$bgcolor2,$db$ThemeSel;
    
$l_size getimagesize("themes/$ThemeSel/images/leftbar.gif");
    
$m_size getimagesize("themes/$ThemeSel/images/mainbar.gif");
    
$r_size getimagesize("themes/$ThemeSel/images/rightbar.gif");
    
$resulttotal $db->sql_query("SELECT sum(hits) as TotalHitsHour from ".$prefix."_stats_hour where year='$year' and month='$month' and date='$date'");
    list(
$TotalHitsHour) = $db->sql_fetchrow($resulttotal);
    
$db->sql_freeresult($resulttotal);
    
$nowdate date("d-m-Y");
    
$nowdate_arr explode("-",$nowdate);
    echo 
"<table width=\"70%\"align=\"center\" bgcolor=\"#000000\" cellspacing=\"1\" cellpadding=\"3\" border=\"0\">";
    echo 
"<tr><td width=\"15%\" bgcolor=\"$bgcolor2\">Время</td><td bgcolor=\"$bgcolor2\" width=\"70%\">Просмотрено страниц</td></tr>";
for (
$k 0;$k<=23;$k++) {
        
$result $db->sql_query("select hour,hits from ".$prefix."_stats_hour where year='$year' and month='$month' and date='$date' and hour='$k'");
        if (
$db->sql_numrows($result) == 0){
            
$hits=0;
        } else {
            
$row $db->sql_fetchrow($result);
            
$hour intval($row['hour']);
            
$hits intval($row['hits']);
        }
        echo 
"<tr><td bgcolor=\"$bgcolor1\">";
        if (
$k 10) {
            
$a "0$k";
        } else {
            
$a $k;
        }
        echo 
"$a:00 - $a:59";
        
$a "";
        echo 
"</td><td bgcolor=\"$bgcolor1\">";
        if (
$hits == 0) {
            
$WidthIMG 0;
            
$d_percent 0;
        } else {
            
$WidthIMG round(100 $hits/$TotalHitsHour,0);
            
$d_percent substr(100 $hits $TotalHitsHour05);
        }
        echo 
"<img src=\"themes/$ThemeSel/images/leftbar.gif\" Alt=\"\" width=\"$l_size[0]\" height=\"$l_size[1]\"><img src=\"themes/$ThemeSel/images/mainbar.gif\" height=\"$m_size[1]\" width=",$WidthIMG 2," Alt=\"\">"
        
."<img src=\"themes/$ThemeSel/images/rightbar.gif\" Alt=\"\" width=\"$r_size[0]\" height=\"$r_size[1]\"> $d_percent% ($hits хитов)</td></tr>"
        
."</td></tr>";
    }
    
$db->sql_freeresult($result);
    echo 
"</table>";
}

switch(
$op) {

    case 
"Stats":
    
Stats($total);
    break;
}

?>

   
 
 автор: kasmanaft   (24.10.2006 в 22:33)   письмо автору
 
   для: korefan   (24.10.2006 в 19:32)
 

попробуйте изменить временную зону при помощи ф-ии date_default_timezone_set

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования