Странности с time() и вычислением времени.

Discussion in 'PHP' started by N2kroot, 27 Aug 2010.

  1. N2kroot

    N2kroot New Member

    Joined:
    25 Oct 2009
    Messages:
    75
    Likes Received:
    3
    Reputations:
    0
    Доброго всем времени суток, пишу по странной проблеме :

    В переменной $time_voted хранится время последнего голосования, а $time_last - секунды, сколько должно пройти между голосованиями.

    Сорец кода :
    PHP:
    if (time() > $time_voted+$time_last) { 
    $golos 'Вы <b>можете</b> проголосовать!';
    } else {
    $now time(); $ostalos $time_voted time();
    echo 
    'До голосования осталось' $ostalos;
               }
    Что должно быть : после подхода времени к 0 пользователь\гость может проолосовать.

    Что не так : после 0 начинается "-", т.е.
    До голосования осталось -122
    До голосования осталось -472
    И т.д.

    Вопрос : что не так?
     
  2. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    минус - потому что считаешь не правильно
    $ostalos = $time_voted + $time_last - time();
     
    1 person likes this.
  3. N2kroot

    N2kroot New Member

    Joined:
    25 Oct 2009
    Messages:
    75
    Likes Received:
    3
    Reputations:
    0
    Переписал код, но теперь ещё лучше!
    После того, как дошло до 0, идёт не "-", а Вы сможете проголосовать через 8783 час (-ов) ,52 минут и 24 секунд
     
  4. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    напиши код, а то не видно в какой строке такое может выводиться
     
  5. llirikov

    llirikov New Member

    Joined:
    18 Aug 2010
    Messages:
    14
    Likes Received:
    3
    Reputations:
    0
    time() - больше других, тк это текущее время
    чтобы проголосовать, нужно чтобы time() - $time_voted было больше или равно $time_last

    PHP:
    if (time() - $time_voted >= $time_last) {  
        
    $golos 'Вы <b>можете</b> проголосовать!'
    } else { 
        
    $now time(); $ostalos $time_last - (time() - $time_voted);
        echo 
    'До голосования осталось' $ostalos
    }  
     
    #5 llirikov, 29 Aug 2010
    Last edited: 29 Aug 2010
  6. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    :wall:
    чем тебе предыдущий вариант не нравился, предложенный мной?
    $now мог бы при вычислениях использовать, а так эта переменная вообще не нужна, получается
    $ostalos = $time_voted + $time_last - time();
    если первое условие ты можешь вертеть как хочешь, то с вычислением этой переменной вариантов нет

    PHP:
    if (time() - $time_voted >= $time_last) {
        echo 
    'Вы <b>можете</b> проголосовать!';
    } else {
        
    $ostalos $time_voted $time_last time();
        echo 
    'До голосования осталось' $ostalos;
    }
     
  7. llirikov

    llirikov New Member

    Joined:
    18 Aug 2010
    Messages:
    14
    Likes Received:
    3
    Reputations:
    0
    да, накосячил я после else, но твой вариант тоже неправильный - если пройдет много времени, то $ostalos будте отрицательным

    в своем посте выше код поправил как нужно
     
  8. N2kroot

    N2kroot New Member

    Joined:
    25 Oct 2009
    Messages:
    75
    Likes Received:
    3
    Reputations:
    0
    Я всё понял, спасибо за участие в проблеме!

    Правильный код :
    PHP:
    if (time() > $time_voted) { $golos 'Вы <b>можете</b> проголосовать!';
    } else {
    $now time(); $ostalos $time_voted time();
     
  9. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    если пройдёт много времени, то до else уже не дойдёт и $ostalos считаться не будет
    и ещё, ты поправил:
    $time_last - (time() - $time_voted);
    из арифметики это тоже самое, что и
    $ostalos = $time_voted + $time_last - time();

    N2kroot
    $time_voted = время следующего голосования? тогда всё верно. но по названию это время, когда юзер проголосовал..
    однако $now = time(); у тебя снова не используется, а в сравнении лучше >=, чем >
     
  10. N2kroot

    N2kroot New Member

    Joined:
    25 Oct 2009
    Messages:
    75
    Likes Received:
    3
    Reputations:
    0
    Да-да, это время когда юзер проголосовал. Хранится в БД.
    Спасибо за советы.