Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实时显示_Javascript_Html_Angularjs - Fatal编程技术网

Javascript 实时显示

Javascript 实时显示,javascript,html,angularjs,Javascript,Html,Angularjs,我试图在页面上显示经过的实时时间 所以我有一个函数,它计算到第二秒的确切时间,当调用时,它会用这个时间更新HTML节点。使用setInterval每秒调用此函数以更新显示似乎效率低下。有人能提出更好的解决方案吗?非常感谢 $scope.getAge = function(){ var today = new Date(); var birthDate = new Date("1980-05-30T04:00:00"); va

我试图在页面上显示经过的实时时间

所以我有一个函数,它计算到第二秒的确切时间,当调用时,它会用这个时间更新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();

            }
       };

当需要一段时间时,使用setInterval比超时更好()

另外,如果您使用的是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);
};
{{age}
...
$scope.getAge=function(){
var today=新日期();
var出生日期=新日期(“1980-05-30T04:00:00”);
var bdInMilis=birthDate.getTime();
setInterval(函数(){
var todayInMilis=today.getTime();
var timeAlive=今天的整数倍-整数倍;
timeAlive=timeAlive/1000;
var numyears=数学地板(timeAlive/31536000);
var numdays=数学楼层((timeAlive%31536000)/86400);
var numhours=数学楼层((时间活动%31536000)%86400)/3600);
var numminutes=数学地板(((timeAlive%31536000)%86400)%3600)/60);
var numseconds=数学地板(((timeAlive%31536000)%86400)%3600)%60);
$scope.age=“我是”+numyears+“年”、+numdays+“天”、+numhours+“小时”、+numminutes+“分钟”、+numseconds+“秒(给或拿)”;
},1000);
};

当您需要一段时间时,使用setInterval优于超时()

另外,如果您使用的是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);
};
{{age}
...
$scope.getAge=function(){
var today=新日期();
var出生日期=新日期(“1980-05-30T04:00:00”);
var bdInMilis=birthDate.getTime();
setInterval(函数(){
var todayInMilis=today.getTime();
var timeAlive=今天的整数倍-整数倍;
timeAlive=timeAlive/1000;
var numyears=数学地板(timeAlive/31536000);
var numdays=数学楼层((timeAlive%31536000)/86400);
var numhours=数学楼层((时间活动%31536000)%86400)/3600);
var numminutes=数学地板(((timeAlive%31536000)%86400)%3600)/60);
var numseconds=数学地板(((timeAlive%31536000)%86400)%3600)%60);
$scope.age=“我是”+numyears+“年”、+numdays+“天”、+numhours+“小时”、+numminutes+“分钟”、+numseconds+“秒(给或拿)”;
},1000);
};

首先,您可以将前3个变量移出方法;他们不会每次都有什么不同。另外,另一方面。请看做指令。如果你的意思是
setTimeInterval
而不是
setTimeout
,我想不出不使用这两种方法中的任何一种就可以在JavaScript中获取时钟的方法。如果有人这样做,我会非常好奇!首先,您可以将前3个变量移到方法之外;他们不会每次都有什么不同。另外,另一方面。请看做指令。如果你的意思是
setTimeInterval
而不是
setTimeout
,我想不出不使用这两种方法中的任何一种就可以在JavaScript中获取时钟的方法。如果有人这样做,我会非常好奇!我认为问题是关于是否有一种方法不使用
设置超时
(以及
setTimeInterval
我假设)任何其他建议都应该放在评论中。我认为问题是关于是否有一种方法不使用
设置超时
(以及
setTimeInterval
我假设)任何其他的建议都应该写在评论中。。