我有一个时钟脚本:
function digitalWatch(timestamp) {
var date = new Date(timestamp);
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
if (hours < 10) hours = "0" + hours;
if (minutes < 10) minutes = "0" + minutes;
if (seconds < 10) seconds = "0" + seconds;
document.getElementById("digital_watch").innerHTML = hours + ":" + minutes + ":" + seconds;
setTimeout(function(){digitalWatch(timestamp+1)}, 1000);
}
digitalWatch(<<here I pass a UNIX timestamp from server>>)钟坏了。我用console.log()对它进行了调试,我看到时间戳正确地增加了,但是Date()构造函数一次又一次地返回相同的结果。
有人知道这里有什么问题吗?我该怎么解决呢?
发布于 2013-09-19 10:51:24
UNIX时间戳以秒计,JavaScript时间戳计数以毫秒为单位。
您只需将传递的时间戳乘以1000,例如:
var date = new Date(timestamp * 1000);这不仅将修复初始转换,而且确保当您添加一秒钟(在计时器回调中)时,您实际上要增加1秒,而不仅仅是1毫秒。后者是您获得相同Date对象的原因--您几乎肯定不是,但是新对象比前一个晚1ms,所以大部分时间都会显示相同的HH:MM:SS值。
在实践中,请注意,您会发现,setTimeout并不保证事件将触发1000 so的间隔,因此您将得到一些时钟漂移。
您应该考虑到前面的代码运行所需的时间--实际上,更好的方法可能是简单地确定最初提供的时间戳与本地计算机的时间之间的差异,并将其用作所有后续调用的引用值。
https://stackoverflow.com/questions/18892620
复制相似问题