JavaScript时钟:将实时时间转换为秒

3
我对JavaScript还不是很熟悉,一直在尝试创建一个时钟(需要稍微解释一下,请耐心等待):
我正在尝试创建一个JavaScript时钟,该时钟跟随实时时间,然后计算自午夜以来经过了多少秒(此时时钟重置)。然后我想能够定义一个秒在毫秒中的长度,即更改一个秒持续的时间。
我的计划是创建一个工作时钟,在24小时内准确计数200,000个“秒”(如果每个“秒”持续0.432秒,则会发生这种情况)。
有什么技巧吗?所有帮助将不胜感激。
附:对于那些感兴趣的人,我正在撰写一篇关于时间理论的论文,在其中我认为时钟应遵循公制系统,并且一天应该有20个小时,每个小时应持续100分钟,每分钟应持续100秒。通过这样做,时钟只是一个从午夜到午夜倒计时到200,000的计时器。
补充:如果有任何不清楚之处,我会尽力解释得更深入。

1
请查看Date对象和setInterval方法。 - A1rPun
4
好的,你的问题是什么?你需要使用Date对象获取当前时间,并从中获取小时、分钟和秒钟,将其转换为秒,然后转换为你的格式。使用setInterval让代码按照你想要的频率更新。注意:不要期望setInterval是准确的。也就是说,如果你要求它每1000毫秒更新一次,它会漂移,所以总是用Date.now()获取实时时间。 - Matt Burland
1
@MattBurland 群体智慧 - A1rPun
2个回答

2
您需要 setInterval 函数,您可以指定它每 432 毫秒触发一次。
secondTimer = window.setInterval(function () {
    // do stuff in here
},432);

正如其他人所提到的,这不是最准确的计时器,因此您需要使用 Date 对象来与实际时间同步。


2
在 JavaScript 中,日期实际上是一个数字,它计算了自特定固定日期以来的毫秒数。因此,如果您在 JavaScript 中有任何日期,可以使用其 getTime 方法来查看该数字。链接中的文档比我的简短描述更详细。
因此,如果您想查看从今天 0 点到今天现在经过了多少秒,可以使用以下代码:
var now = new Date(); // a new Date initialized without parameter defaults to current time

// Initializing with just year, month and day will set the time of the day to 00:00:00
var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());

var milisseconds = now.getTime() - today.getTime();

现在你要做的就是将 milisseconds 变量除以 1000,然后你就得到了“英制”秒数。从那时起,你可以按照自己的意愿转换为“公制”秒数。

这就够用了... 现在,要让 Javascript 在给定的时间间隔内执行某些操作,你可以使用全局函数 setInterval,就像Mordred's answer中那样。我在此引用,但要感谢他并给予赞扬。

timer = setInterval(function () {
    // do stuff in here
}, 432); // 432 is an arbitrary value, this will fire once every 432 milisseconds.

请查看文档关于此事SetTimeout的相关内容
正如Matt在评论中所说,Javascript中的定时事件可能不会按照您设置的时间间隔准确触发 - 还有其他因素,您可以对此进行一些研究 - 因此,请通过初始化一个新的Date对象来检查事件触发时的当前时间。请注意:
var x = Date.now();

是以下简写:

var d = new Date();
var x = d.getTime();

对初学者来说,使用JavaScript处理日期可能有点棘手...请注意,Date对象的某些方法名称和属性可能会误导人。月份是从零开始计数的,并且getDay将返回一周中的星期几而不是一个月中的日期,因此请确保阅读一些文档。除此之外,祝你好运,编程愉快!


1
他说他的度量单位“秒”并不是真正的秒,而是实际秒数的0.432倍,这就是为什么我指定了432作为间隔时间的原因。 - Mordred

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接