За последние 24 часа нас посетили 19458 программистов и 1605 роботов. Сейчас ищет 951 программист ...

Как сделать чтоб счетчик на сайте обнулялся в 24 часа по Киеву?

Тема в разделе "PHP для новичков", создана пользователем Espey, 15 дек 2016.

  1. Espey

    Espey Зэк
    [ БАН ]

    С нами с:
    25 ноя 2016
    Сообщения:
    129
    Симпатии:
    4
    Использую модуль mod_jvcounter для Joomla 3, как сделать что статистика за сегодняшний день (today) обнулялась в 24 часа по Киеву, а не в 7 (19.00).

    Вот /modules/mod_jvcounter/helper.php

    PHP:
    1. <?php
    2. /**
    3. # Module        JV Counter
    4. # ------------------------------------------------------------------------
    5. # author    Open Source Code Solutions Co
    6. # copyright Copyright В© 20011-2013 joomlaschetchik.ru. All Rights Reserved.
    7. # @license - http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL or later.
    8. # Websites: http://joomlaschetchik.ru/
    9. -------------------------------------------------------------------------*/
    10. // No direct access to this file
    11. defined( '_JEXEC' ) or die( 'Restricted access' );
    12.  
    13.  
    14. class modJVCounterHelper
    15. {
    16.     function getTotalImage($params,$totalNumber){
    17.      
    18.         $arrNumber = modJVCounterHelper::getArrayNumber($params->get('numberofdigits',5),$totalNumber);
    19.         $type = $params->get('digittype','type1');
    20.      
    21.         $html = '';
    22.         if($arrNumber) foreach($arrNumber as $number){
    23.             $html .= modJVCounterHelper::getDigitImage($number,$type);
    24.         }
    25.      
    26.         return $html;
    27.     }
    28.  
    29.     function getArrayNumber($length,$number){
    30.         $strlen = strlen($number);
    31.      
    32.         $arr    =    array();
    33.         $diff    =    $length -  $strlen;
    34.      
    35.         while ( $diff>0 ){
    36.             array_push( $arr,0 );
    37.             $diff--;
    38.         }
    39.      
    40.         $arrNumber    =    str_split( $number );
    41.      
    42.         $arr        =    array_merge( $arr,$arrNumber );
    43.      
    44.         return $arr;
    45.     }
    46.  
    47.     function getDigitImage($number,$type){
    48.         $html = '';
    49.         $html .= '<img class="jvcounter_digit" src="modules/mod_jvcounter/assets/images/digitstype/'.$type.'/'.$number.'.png" alt=""/>';
    50.         return $html;
    51.     }
    52.     //=========================================================//
    53.     function getVisits($params){
    54.      
    55.         $options   = modJVCounterHelper::getOptions($params);
    56.         $timestart = modJVCounterHelper::getTimeStart($options);
    57.         $startdaycounter = $params->get('startdaycounter');
    58.      
    59.      if($startdaycounter == '')
    60.      {
    61.          $startdaycounter = "2008-01-01 00:00:00";
    62.      }
    63.             $startdaycounterUnix = JFactory::getDate($startdaycounter)->toUnix();
    64.          
    65.             $where = "WHERE a.timelast >= $startdaycounterUnix";
    66.  
    67.      
    68.         $db = &JFactory::getDbo();
    69.         $query = "SELECT a.*,u.name,u.username,u.email
    70.                    FROM #__jvcounter_logs as a
    71.                    LEFT JOIN #__users as u ON u.id = a.user_id
    72.                    $where
    73.                    ORDER BY a.timelast desc
    74.                 ";
    75.         $db->setQuery($query);
    76.    
    77.         $rows = $db->loadObjectList();
    78.      
    79.         $visits['total'] = count($rows) + (int)$params->get('startofcounter',0);
    80.      
    81.         if($rows) foreach($rows as $row){
    82.          
    83.             $timelast = (int)$row->timelast + $options['timeoffset'];
    84.          
    85.             if($timelast >= (int)$timestart['online'] && $params->get('showonline',1)){
    86.              
    87.                 if($row->user_id){
    88.              
    89.                     $visits['online']['user'] = $row;
    90.                  
    91.                 }else{
    92.                     $visits['online']['guest'] = $row;
    93.  
    94.                 }
    95.             }
    96.          
    97.             if($timelast >= $timestart['thismonth'] && $params->get('showthismonth',1)){
    98.                 $visits['thismonth'][] = $row;
    99.              
    100.                 if($timelast >= $timestart['thisweek'] && $params->get('showthisweek',1)){
    101.                     $visits['thisweek'][] = $row;
    102.                  
    103.                     if($timelast >= $timestart['today'] && $params->get('showtoday',1)){
    104.                         $visits['today'][] = $row;
    105.                     }else if($timelast >= $timestart['yesterday'] && $params->get('showyesterday',1)){
    106.                         $visits['yesterday'][] = $row;
    107.                     }
    108.                  
    109.                 }else if($timelast >= $timestart['lastweek'] && $params->get('showlastweek',1)){
    110.                     $visits['lastweek'][] = $row;
    111.                 }
    112.             }else if($timelast >= $timestart['lastmonth'] && $params->get('showlastmonth',1)){
    113.                 $visits['lastmonth'][] = $row;
    114.             }
    115.         }
    116.      
    117.         return $visits;
    118.     }
    119.  
    120.     function getOptions($params){
    121.         $config                              = &JFactory::getConfig();
    122.         $options['lifetime']              = 60*(int)$config->get('lifetime');
    123.         $options['timeoffset']            = 60*60*(int)$params->get('timeoffset',7);
    124.      
    125.         $options['now']['unix']           = mktime() + $options['timeoffset'];
    126.         $options['now']['daymonthyear']   = explode('-',JFactory::getDate($options['now']['unix'])->format('d-m-Y'));
    127.      
    128.         $options['durationDay']           = 24*60*60;
    129.         $options['onlinestarttime']       = $options['now']['unix'] - $options['lifetime'];
    130.         return $options;
    131.     }
    132.  
    133.     function getTimeStart($options){
    134.      
    135.         $timestart['online']    = $options['onlinestarttime'];
    136.         $timestart['today']     = $options['now']['unix'] - ($options['now']['unix'] % $options['durationDay']);
    137.         $timestart['yesterday'] = $timestart['today'] - $options['durationDay'];
    138.      
    139.         $nameToday     = modJVCounterHelper::getNameOfDay($options['now']['daymonthyear'][0],$options['now']['daymonthyear'][1],$options['now']['daymonthyear'][2]);
    140.         $positionToday = modJVCounterHelper::getPositionOfDay($nameToday);
    141.         $timestart['thisweek']  = $timestart['today'] - $positionToday*$options['durationDay'];
    142.         $timestart['lastweek']  = $timestart['thisweek'] - 7*$options['durationDay'];
    143.         $timestart['thismonth'] = $timestart['today'] - ((int)$options['now']['daymonthyear'][0] - 1)*$options['durationDay'];
    144.      
    145.         $daysoflastmonth = modJVCounterHelper::getDaysofMonth((int)$options['now']['daymonthyear'][1] - 1,$options['now']['daymonthyear'][2]);
    146.         $timestart['lastmonth'] = $timestart['thismonth'] - $daysoflastmonth*$options['durationDay'];
    147.          
    148.         return $timestart;
    149.     }
    150.  
    151.     function getPositionOfDay($name){
    152.         $arrDay = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    153.         foreach($arrDay as $key=>$day){
    154.             if($day==$name){
    155.                 return $key;
    156.             }
    157.         }
    158.         return;
    159.     }
    160.  
    161.     function getDaysofMonth($month,$year){
    162.      
    163.         $ts = mktime(0,0,0,$month,1,$year);
    164.      
    165.         return date("t", $ts);
    166.      
    167.     }
    168.     function getNameOfDay($day,$month,$year){
    169.         $ts = mktime(0,0,0,$month,$day,$year);
    170.      
    171.         return date("l", $ts);
    172.     }
    173.  
    174.  
    175.     // show online count
    176.     static function getOnlineCount() {
    177.         $db        = JFactory::getDbo();
    178.         // calculate number of guests and users
    179.         $result    = array();
    180.         $user_array  = 0;
    181.         $guest_array = 0;
    182.         $query    = $db->getQuery(true);
    183.         $query->select('guest, client_id');
    184.         $query->from('#__session');
    185.         $query->where('client_id = 0');
    186.         $db->setQuery($query);
    187.         $sessions = (array) $db->loadObjectList();
    188.  
    189.         if (count($sessions)) {
    190.             foreach ($sessions as $session) {
    191.                 // if guest increase guest count by 1
    192.                 if ($session->guest == 1) {
    193.                     $guest_array ++;
    194.                 }
    195.                 // if member increase member count by 1
    196.                 if ($session->guest == 0) {
    197.                     $user_array ++;
    198.                 }
    199.             }
    200.         }
    201.  
    202.         $result['user']  = $user_array;
    203.         $result['guest'] = $guest_array;
    204.      
    205.         return $result;
    206.     }
    207.  
    208.     // show online member names
    209.     static function getOnlineUserNames($params) {
    210.         $db        = JFactory::getDbo();
    211.         $query    = $db->getQuery(true);
    212.         $query->select('a.username, a.time, a.userid, a.usertype, a.client_id');
    213.         $query->from('#__session AS a');
    214.         $query->where('a.userid != 0');
    215.         $query->where('a.client_id = 0');
    216.         $query->group('a.userid');
    217.         $user = JFactory::getUser();
    218.         if (!$user->authorise('core.admin') && $params->get('filter_groups', 0) == 1)
    219.         {
    220.             $groups = $user->getAuthorisedGroups();
    221.             if (empty($groups))
    222.             {
    223.                 return array();
    224.             }
    225.             $query->leftJoin('#__user_usergroup_map AS m ON m.user_id = a.userid');
    226.             $query->leftJoin('#__usergroups AS ug ON ug.id = m.group_id');
    227.             $query->where('ug.id in (' . implode(',', $groups) . ')');
    228.             $query->where('ug.id <> 1');
    229.         }
    230.         $db->setQuery($query);
    231.         return (array) $db->loadObjectList();
    232.     }
    233.  
    234. }
    235. ?>
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хз. может часы на сервере перевести?
     
  3. Espey

    Espey Зэк
    [ БАН ]

    С нами с:
    25 ноя 2016
    Сообщения:
    129
    Симпатии:
    4
    Я думаю хостинг не захочет под каждый сайт время на сервера переводить, ну да ладно, это не так важно, не так критически необходимо, главное что работает.
     
  4. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а банально в конфиге неужели не задается время ? НЕ ВЕРЮ!!
     
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Оно задаётся даже не в конфиге, а прямо с php скрипта (Как вариант, хотя можно и в конфиге) - date_default_timezone_set('+2'); (У Киева часовой пояс - +2)
     
  6. Espey

    Espey Зэк
    [ БАН ]

    С нами с:
    25 ноя 2016
    Сообщения:
    129
    Симпатии:
    4
    Я сделал все, спасибо за помощь.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    крутяк
     
  8. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Можно было бы и написать что именно сделал))
     
  9. Espey

    Espey Зэк
    [ БАН ]

    С нами с:
    25 ноя 2016
    Сообщения:
    129
    Симпатии:
    4
    Я отобразил на сайте статистику за все время и с помощью скрипта и cron обнуляю эту статистику в 12 вечера по Москве.
     
  10. Espey

    Espey Зэк
    [ БАН ]

    С нами с:
    25 ноя 2016
    Сообщения:
    129
    Симпатии:
    4
    Напишу более подробно. Там в модуле есть функция отображения статистика за сегодня, за вчера, за неделю, месяц и так далее. Я включил отображение за все время и в 12 часов по Москве с помощью cron обнуляю статистику.

    Вот так я решил задачу.