Я пытаюсь отобразить живое истекшее время на страницеЖивого отображение возраст
Так что у меня эта функция, которая вычисляет точное время, прошедшее со вторым, и при вызове, он обновляет 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();
}
};
Вы можете, для начала, перенести первые 3 переменные за пределы метода; они не будут отличаться каждый раз. Кроме того, на другую ноту. Пожалуйста, посмотрите на выполнение директив. Вы никогда не должны взаимодействовать с DOM в контроллере :) – Darren
, предполагая, что вы имели в виду 'setTimeInterval', а не' setTimeout'. Я не могу придумать способ получить часы в JavaScript без использования одного из этих двух методов. Мне было бы очень интересно, если кто-то это сделает! – Shaunak