gpt4 book ai didi

JavaScript:时钟和 Date()

转载 作者:行者123 更新时间:2023-11-28 20:17:50 26 4
gpt4 key购买 nike

所以我有这个时钟脚本:

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

有人知道这里出了什么问题吗?又该如何解决呢?

最佳答案

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

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

var date = new Date(timestamp * 1000);

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

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

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

关于JavaScript:时钟和 Date(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18892620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com