2015-08-06 2 views
1

Я пытаюсь отобразить живое истекшее время на страницеЖивого отображение возраст

Так что у меня эта функция, которая вычисляет точное время, прошедшее со вторым, и при вызове, он обновляет HTML-узел с этим временем , Кажется, крайне неэффективно использовать setInterval для вызова этой функции каждую секунду для обновления дисплея. Может ли кто-нибудь предложить лучшее решение? Большое спасибо

$scope.getAge = function(){ 
      var today = new Date(); 
      var birthDate = new Date("1980-05-30T04:00:00"); 
      var bdInMilis = birthDate.getTime();   
      var todayInMilis = today.getTime(); 

      var timeAlive = todayInMilis - bdInMilis; 
      timeAlive = timeAlive/1000; 

      var numyears = Math.floor(timeAlive/31536000); 

      var numdays = Math.floor((timeAlive % 31536000)/86400); 

      var numhours = Math.floor(((timeAlive % 31536000) % 86400)/3600); 

      var numminutes = Math.floor((((timeAlive % 31536000) % 86400) % 3600)/60); 

      var numseconds = Math.floor((((timeAlive % 31536000) % 86400) % 3600) % 60); 

      var ageNode = document.getElementById("age-node"); 

      if(ageNode){ 

       ageNode.innerHTML = ("I am "+numyears+ " years, " + numdays + " days, " + numhours + " hours, " + numminutes + " minutes, " + numseconds + " seconds old (give or take)"); 

       // can't keep doing this calculation every second 
       //$scope.refreshTime(); 

      } 
     }; 
+1

Вы можете, для начала, перенести первые 3 переменные за пределы метода; они не будут отличаться каждый раз. Кроме того, на другую ноту. Пожалуйста, посмотрите на выполнение директив. Вы никогда не должны взаимодействовать с DOM в контроллере :) – Darren

+0

, предполагая, что вы имели в виду 'setTimeInterval', а не' setTimeout'. Я не могу придумать способ получить часы в JavaScript без использования одного из этих двух методов. Мне было бы очень интересно, если кто-то это сделает! – Shaunak

ответ

0

Если вы хотите, период времени, используя setInterval лучше, чем таймауты (check this)

Также вы используете angularjs, не связывают вашу строку с innerHTML.

<div>{{age}}</div> 
... 
$scope.getAge = function(){ 
    var today = new Date(); 
    var birthDate = new Date("1980-05-30T04:00:00"); 
    var bdInMilis = birthDate.getTime(); 

    setInterval(function(){ 
     var todayInMilis = today.getTime(); 
     var timeAlive = todayInMilis - bdInMilis; 
     timeAlive = timeAlive/1000; 
     var numyears = Math.floor(timeAlive/31536000); 
     var numdays = Math.floor((timeAlive % 31536000)/86400); 
     var numhours = Math.floor(((timeAlive % 31536000) % 86400)/3600); 
     var numminutes = Math.floor((((timeAlive % 31536000) % 86400) % 3600)/60); 
     var numseconds = Math.floor((((timeAlive % 31536000) % 86400) % 3600) % 60); 
     $scope.age = "I am "+numyears+ " years, " + numdays + " days, " + numhours + " hours, " + numminutes + " minutes, " + numseconds + " seconds old (give or take)"; 
    },1000); 
}; 
+0

Я думаю, что вопрос в том, есть ли способ не использовать 'set timeout' (и' setTimeInterval', который я предполагаю), любые другие предложения должны идти в комментариях. – Shaunak

Смежные вопросы