Javascript时间 - 每半小时运行一次功能

时间:2014-03-10 16:13:06

标签: javascript datetime

我做了这个功能,做了两件事:返回到下一个30分钟标记的时间量,并在计时器到达零时调用halfHour函数。如果时间为12:06:27,则输出为24:33(mm:ss)

function checkTime() {
  var time = new Date();
  var mins = time.getMinutes();
  mins = (60-mins) % 30;
  var secs = time.getSeconds();
  if (secs != 60){
  secs = (60-secs) % 60;
  } else {
  secs = 00;
  }
  time = [Number(mins),Number(secs)];
  if (mins == 0 && secs == 0){
    halfHour();
  }
  return time;
}

这样可行,但有一个奇怪的故障。当分钟滚动时,它显示...... 24:02 24:01 23:00 23:59 23:58

它也会在最后一个序列中的错误halfHour();标记处过早地拨打0:00一分钟:1:02 1:01 0:00 0:59

我们如何纠正这个?


解决

评论者dbrin和njzk2有解决方案。它会从59而不是60减去分和秒。以下是经过修改的工作代码。抱歉,它太乱了。

function checkTime() {
  var time = new Date();
  var mins = time.getMinutes();
  mins = (59-mins) % 30;
  var secs = time.getSeconds();
  if (secs != 60){
  secs = (59-secs) % 60;
  } else {
  secs = 00;
  }
  time = [Number(mins),Number(secs)];
  if (mins == 0 && secs == 0){
    halfHour();
  }
  return time;
}

2 个答案:

答案 0 :(得分:2)

当JavaScript具有内置的setInterval(代码,延迟)时,为什么要重新发明轮子;实现这个目标。

setInterval(function() {
    alert("I will fire after every 2 seconds")
}, 2000);

答案 1 :(得分:0)

衡量时间的方式存在缺陷。分钟数和秒数不能单独考虑,正如我在之前的评论中所示。

更简单的方法是先测量总秒数,然后对其进行格式化:

var time = new Date();
var totalS = 60 * ((60 - time.getMinutes()) % 30) - time.getSeconds()
var secs = totalS % 60
var mins = (totalS - secs) / 60