Date()
如何处理翻转?
假设您调用getMinute()
并返回10。您调用getSecond()
并返回0。是因为时间是分钟10的第二个0,还是因为两个调用之间的时间倒计时到新的分钟,而不是第11分钟的第二个零?
在JS中是否有规定的方法来处理此问题?
如果没有,有没有比重复读取所有值直到它们匹配的常规技巧更好的解决方案?
答案 0 :(得分:4)
是因为时间是分钟10的秒0 ...
是的
...还是因为两个呼叫之间的时钟倒计时到新的分钟,而不是11分钟的第二个零?
不。 :-)
除非您进行更改,否则Date
实例中的时间不会更改。您可以安全地阅读小时,分钟,秒和秒,并知道它们都与您创建或最后修改该日期实例时的状态相同。
创建Date
实例时,它会存储一个“时间值”,该时间值是自大纪元(格林尼治标准时间1970年1月1日午夜)以来的毫秒数。 (Date
之前日期的实例具有负的时间值,因为它们具有正的时间值。)除非您通过Date
的mutator方法之一({ {1}}等。
下面是一个生动的例子,展示了它实际上并没有改变:
setHours
答案 1 :(得分:0)
为帮助您了解Date
对象的可能性,请使其每秒刷新多次。并将所需的属性放在输出字段中。我之所以添加它,是因为getTime()
是最精确的时间参考,因为它包含毫秒。由此,您可以始终以各种方式计算出分钟,小时或天。
下面提供一些示例,将来可以为您提供帮助:
const element = document.getElementById('time-var-output');
const snippetStartT = (new Date()).getTime();
const echoTime = function (){
var date = new Date();
var time = date.getTime();
element.value = 'getTime(): '+time+"\n";
element.value += 'seconds.ms: '+(time/1000)+"\n";
element.value += 'seconds: '+parseInt(time/1000)+"\n";
element.value += 'minutes: '+parseInt(time/1000/60)+"\n";
element.value += 'hours: '+parseInt(time/1000/60/60)+"\n";
element.value += 'days: '+parseInt(time/1000/60/60/24)+"\n";
element.value += 'seconds after start: '+parseInt((time-snippetStartT)/1000)+"\n";
element.value += 'UTC-Date: '+date.toISOString().slice(0, 19).replace('T', ' ');
}
window.setInterval(echoTime,(1000/20)) // refresh 20 times per second
<div id="developer-output"> output:<br>
<textarea id="time-var-output" cols="32" rows="10" readonly='true'></textarea>
</div>