2012-03-13 2 views
0

Я хотел бы обратный отсчет времени, который является разницей между двумя моментами времени от php, результатом является метка времени.JavaScript обратный отсчет от разницы времени php

{var $time = new \DateTime()}   

<div class="date" data-date="{= ($time2->getTimestamp() - $time->getTimestamp())*1000}"> 

В дате данных у меня есть разница во времени [отметка времени]. Теперь я хочу отснять это время. Я получаю эту информацию из HTML в JS.

$(function() {   
    $(".date").each(function(){   
     time = $(this).data('date');   
     $.countdown($(this).children(".countdown"), time); 
    }); 
}); 

Принятый код не работает должным образом.

jQuery.countdown = function(selector, datevalue) { 

        var amount = datevalue; 

     // catch past dates 
     if(amount < 0){ 
      $(selector).html("Done"); 
     } 

     // date is in the future, calculate the diff 
     else{ 
      days=0;hours=0;mins=0;secs=0;out=""; 

      amount = Math.floor(amount/1000);//kill the "milliseconds" so just secs 

      days=Math.floor(amount/86400);//days 
      amount=amount%86400; 

      hours=Math.floor(amount/3600);//hours 
      amount=amount%3600; 

      mins=Math.floor(amount/60);//minutes 
      amount=amount%60; 

      secs=Math.floor(amount);//seconds 

      //if(days != 0){out += days +" day"+((days!=1)?"s":"")+", ";} 
          //if(days == 0) { 
           if(days != 0 || hours != 0){out += ((hours<10)?"0":"") + hours +":";} 
           if(days != 0 || hours != 0 || mins != 0){out += ((mins<10)?"0":"") + mins +":";} 
           out += ((secs<10)?"0":"") + secs; 
           $(selector).html(out); 
          //} 
      // run it all again 
      setTimeout(function() { 
       $.countdown(selector, datevalue); 
      }, 1000); 

     } 

}; 

Время от JS находится в нужном месте, но оно не обращает внимание.

+0

Как следует, что работа, если вы даете тайм-аут на сумму 1 секунду? –

+0

'time = parseInt ($ (this) .data ('date'), 10);' возможно? – mplungjan

+0

, и если вы удалите 'amount = Math.floor (количество/1000); // убейте« миллисекунды », так что просто secs', вы можете удалить * 1000 с вашего php – mplungjan

ответ

0

Ответ очень прост: вы не уменьшаете datevalue переменная. Так его же для всех итераций

Посмотрите на примере ниже него работает отлично

jQuery.countdown = function(selector, datevalue) { 

    var amount = datevalue; 

    // catch past dates 
    if(amount < 0){ 
     $(selector).html("Done"); 
    } 

    // date is in the future, calculate the diff 
    else{ 
     datevalue--; 
     $(selector).html(datevalue); 
     setTimeout(function() { 
      $.countdown(selector, datevalue); 
     }, 1000); 
    } 
}; 

$.countdown('.date', 10);​​​ 
+0

Ou, это просто. Рять ж. –