работа с временем

Тема в разделе "PHP", создана пользователем droit74, 3 июн 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. droit74

    droit74 Постоялец

    Регистр.:
    20 сен 2009
    Сообщения:
    55
    Симпатии:
    0
    подскажите как лучше реализовать работу с временем.
    есть тест на который даётся 45 минут.
    эт нужно запоминать начальное время прибавить к ниму 45 минут и после все последушие запросы сравнивать с этим временем,
    и как правильно работать с временем.
     
  2. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    это лучше делать на джаве с таймером и куками, а не на пхп
     
  3. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    Если пользователь как-нибудь авторизуется, то храните время начала теста + 45 минут на сервере например в БД или в Сессии. При любых действиях пользователя проверяйте текущее время и время, записанное в БД.

    Хранить время в куках не рекомендую, т.к. куки можно подправить.
     
  4. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    http://brainbench.com

    насколько я понимаю там время именно на куках. а что будет при разрыве соединения, если использовать серверное управление временем? ничего хорошего
     
  5. dig555

    dig555

    Регистр.:
    22 июн 2007
    Сообщения:
    362
    Симпатии:
    148
    Ну в куки не обязательно записывать информацию в явном виде. Можно же написать пользовательскую функцию обратимого шифрования. Время шифруем - пишем в куки. Посетитель не зная функции - подправить не сможет. :)
     
  6. ddmaster

    ddmaster Читатель

    Регистр.:
    18 май 2010
    Сообщения:
    15
    Симпатии:
    0
    Вариант dig555 вполне неплох, только не забудь учесть, что могут грохнуть и полностью куки для домена (тут нужно обрубать прохождение теста).
    А вообще все зависит от целей и целевой группы пользователей на которых расчитан тест. Возможно, заморочки излишни :)
     
  7. blizz123

    blizz123 Читатель

    Заблокирован
    Регистр.:
    25 апр 2010
    Сообщения:
    99
    Симпатии:
    17
    могу посоветовать использовать подобную штуку на сервере если:
    PHP:
    session_start();
    $HTTP_SESSION_VARS['time'] = 0;
     
  8. Ximich

    Ximich Писатель

    Регистр.:
    22 май 2010
    Сообщения:
    2
    Симпатии:
    0
    Делаем 2 файла: dateadd.inc и datediff.inc:

    dateadd.inc:
    PHP:
    <?php

    function DateAdd($interval$number$date) {

        
    $date_time_array getdate($date);
        
    $hours $date_time_array['hours'];
        
    $minutes $date_time_array['minutes'];
        
    $seconds $date_time_array['seconds'];
        
    $month $date_time_array['mon'];
        
    $day $date_time_array['mday'];
        
    $year $date_time_array['year'];

        switch (
    $interval) {
        
            case 
    'yyyy':
                
    $year+=$number;
                break;
            case 
    'q':
                
    $year+=($number*3);
                break;
            case 
    'm':
                
    $month+=$number;
                break;
            case 
    'y':
            case 
    'd':
            case 
    'w':
                
    $day+=$number;
                break;
            case 
    'ww':
                
    $day+=($number*7);
                break;
            case 
    'h':
                
    $hours+=$number;
                break
            case 
    'n':
                
    $minutes+=$number;
                break;
            case 
    's':
                
    $seconds+=$number
                break;            
        }
           
    $timestampmktime($hours,$minutes,$seconds,$month,$day,$year);
        return 
    $timestamp;
    }

    ?>
    datediff.inc:
    PHP:
    <?php

    Function DateDiff ($interval,$date1,$date2) {
        
    // получает количество секунд между двумя датами 
        
    $timedifference $date2 $date1;

        switch (
    $interval) {
            case 
    'w':
                
    $retval bcdiv($timedifference,604800);
                break;
            case 
    'd':
                
    $retval bcdiv($timedifference,86400);
                break;
            case 
    'h':
                
    $retval =bcdiv($timedifference,3600);
                break
            case 
    'n':
                
    $retval bcdiv($timedifference,60);
                break;
            case 
    's':
                
    $retval $timedifference;
                break;
                
        }
        return 
    $retval;

    }
    ?>
    а потом вот так:
    PHP:
    <?php

    include('datediff.inc';
    include(
    'dateadd.inc');
    $currenttime time();
    echo 
    'Текущее время: '.strftime('%Hh%M %A %d %b',$currenttime).'&lt;br&gt;';
    $newtime DateAdd('n',45,$currenttime);
    echo 
    'Время Х: 'strftime('%Hh%M %A %d %b',$newtime).'&lt;br&gt;';
    $temptime DateDiff('n',$currenttime,$newtime);
    echo 
    'Осталось времени: '.$temptime;
    ?>
    Только сессию нужно сделать как blizz123 посоветовал.
     
  9. so5tmaker

    so5tmaker Писатель

    Регистр.:
    7 мар 2010
    Сообщения:
    10
    Симпатии:
    0
Статус темы:
Закрыта.