getSeconds()和分钟翻转

时间:2019-06-10 10:34:22

标签: javascript

Date()如何处理翻转?

假设您调用getMinute()并返回10。您调用getSecond()并返回0。是因为时间是分钟10的第二个0,还是因为两个调用之间的时间倒计时到新的分钟,而不是第11分钟的第二个零?

在JS中是否有规定的方法来处理此问题?

如果没有,有没有比重复读取所有值直到它们匹配的常规技巧更好的解决方案?

2 个答案:

答案 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">&nbsp;output:<br>
 <textarea id="time-var-output" cols="32" rows="10" readonly='true'></textarea>
</div>