JavaScript:时钟和日期()

时间:2013-09-19 10:49:38

标签: javascript

所以我有这个时钟脚本:

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()构造函数一次又一次地返回相同的结果。

有人知道这里有什么问题吗?我该如何解决?

1 个答案:

答案 0 :(得分:3)

UNIX时间戳以秒为单位计算,JavaScript时间戳以毫秒为单位计算。

您应该将传递的时间戳乘以1000,例如:

var date = new Date(timestamp * 1000);

这不仅可以修复初始转换,还可以确保在添加秒(在计时器回调中)时实际添加1秒,而不仅仅是1毫秒。后者是你出现以获得相同的Date对象的原因 - 你几乎肯定没有,但新的只比前一个晚1毫秒,所以将显示当时的HH:MM:SS大多数

在实践中,请注意,您会发现setTimeout并不能保证事件会相隔1000毫秒,因此您会有一些时钟漂移。

您应该考虑前面的代码运行多长时间 - 实际上更好的方法可能是简单地确定最初提供的时间戳和本地计算机的时间之间的差异,并将其用作所有的参考值后续电话。