javascript - 间隔功能更新秒将如何影响分钟?

标签 javascript date

如果使用整数计数器,那么使用mod 60应该会更容易,但是Date()对象存在一些问题。



<p id="demo"></p>

<script>
var d = new Date();
var timeCounter = 50;
d.setMinutes(0);
d.setSeconds(timeCounter);
setInterval(function(){
    d.setSeconds(timeCounter);
    document.getElementById("demo").innerHTML = d.getMinutes() + ":" + d.getSeconds();
    timeCounter++;
}, 1000);
</script>





在间隔功能之后,分钟将以秒为单位;很好但是,当计数器更改时,分钟将与秒同时增加,例如“ 1:01”,“ 2:02”,“ 3:03” ...

但是当我简单地重复使用getMinutes函数时,该函数正常工作

var d = new Date();
console.log(d.getMinutes());  //12
console.log(d.getMinutes());  //12
console.log(d.getMinutes());  //12


问题间隔函数更新秒将如何影响分钟?

最佳答案

假设初始时间是00:00:00

您将秒设置为50,它将变为00:00:00

然后,您将秒设置为65并尝试变为00:00:65,但这是无效的,因此将多余的秒数添加到分钟数:00:01:15

现在时间是00:01:15

如果将秒更改为30,它将变为00:01:30。您正在更改当前设置时间的秒数,而不是第一次创建对象时设置的时间。

所以时间是00:01:30

如果将秒数更改为65,则会得到00:01:65,这是无效的,因此多余的秒数将添加到已经存在的分钟数中。 1 + 60/60 = 2这样您会得到:00:02:15



如果您想采用这种方法,那么建议您使用Moment库。它具有用于处理添加时间和克隆对象的不错的API。



var start = moment();
start.minute(0);
start.second(0);
var timeCounter = 50;

setInterval(function() {
  // Clone the original object so we aren't adding from the previous value
  var now = moment(start);
  now.seconds(timeCounter);
  document.getElementById("demo").innerHTML = now.format("mm:ss");
  timeCounter++;
}, 1000);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<div id="demo"></div>







不过,这不是一个好方法。 setInterval的精度不是很高,在某些情况下可能会延迟几秒钟。

最好从一个时间开始,然后计算每次更新显示与现在之间的差。



var start = moment();

setInterval(function() {
  // Clone the original object so we aren't adding from the previous value
  var now = moment();
  var dur = moment.duration(now.diff(start)); 
  
  document.getElementById("demo").innerHTML = dur.minutes() + ":" + dur.seconds();
}, 500);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<div id="demo"></div>

关于javascript - 间隔功能更新秒将如何影响分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40985118/

相关文章:

mysql - MySQL:基于日期范围的计算列

Python Week Numbers,其中所有周都有 7 天,无论年份是否翻转

java - Java 中纪元时间格式的字符串到日期

php - 在 wordpress 的 javascript 中使用 php

javascript - Javascript Fullcalendar产品服务器与开发机问题

javascript - 以编程方式将 URL 加载到 ng-view

javascript - 对 Jquery 元素进行排序,如果它具有 1 或更高的属性值并放置在底部

java - 无法理解日期解析

javascript - 动态更改 HTML 标题

javascript - 针对 Wordpress 验证 node.js 中的请求