2017-08-11 115 views
0

我创建了被执行每1秒,输出当前小时,分钟和秒在这样一个跨度的脚本:获取时间每隔1秒的JavaScript

setInterval(()=>{ 
 
    let date = new Date(); 
 
    let time = `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; 
 
    document.getElementById('foo').innerText = time; 
 
}, 1000);
Time :<span id ='foo'>00:00:00</span>

正如你可以每隔1秒查看一次我正在创建一个新的Date对象。 有没有更好的方法来实现这一点,而不必每隔1秒重新创建Date对象?

+1

不这么认为.. –

+0

更好的办法......怎么样?定义“更好”。为什么你想避免创建一个新的日期对象? – Amy

+1

我认为......这不是问题。 – zynkn

回答

2

您可以只递增秒现有Date对象:

let date = new Date(); 

setInterval(() => { 
    date.setSeconds(date.getSeconds() + 1); 

    let time = `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; 
    document.getElementById('foo').innerText = time; 
}, 1000); 

但是现在的问题是,

  1. 多少,这实际上将获得你的表现;和
  2. 执行间隔方法的时间有多确切,以及您的计算日期和实际日期之间随着时间的推移有多少漂移。您可能想要再次重新同步,例如每小时左右。
+0

除* setInterval *没有按照指定的时间间隔运行外,所以时钟会缓慢漂移。这是否“更好”是有争议的。还不清楚为什么将秒设置为新值会比创建新日期使用更少的资源。 – RobG

+0

@RobG你不只是重复我在答案的后半部分所说的一切吗? –

+0

虽然这是一个替代方案,但没有任何迹象表明“更好”,所以不是真正的答案。 :-( – RobG