首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript: clock和Date()

JavaScript: clock和Date()
EN

Stack Overflow用户
提问于 2013-09-19 10:49:37
回答 1查看 104关注 0票数 0

我有一个时钟脚本:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-19 10:51:24

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

您只需将传递的时间戳乘以1000,例如:

代码语言:javascript
复制
var date = new Date(timestamp * 1000);

这不仅将修复初始转换,而且确保当您添加一秒钟(在计时器回调中)时,您实际上要增加1秒,而不仅仅是1毫秒。后者是您获得相同Date对象的原因--您几乎肯定不是,但是新对象比前一个晚1ms,所以大部分时间都会显示相同的HH:MM:SS值。

在实践中,请注意,您会发现,setTimeout并不保证事件将触发1000 so的间隔,因此您将得到一些时钟漂移。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18892620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档