【问题标题】:The Time is wrong时间错了
【发布时间】:2020-10-08 01:58:22
【问题描述】:

分钟和小时似乎不正确,我需要他的分钟不超过 60。非常感谢

 counter = 0;
    var timeleft = 36070;
    
    function leftPad(number, targetLength) {
      var output = number + '';
      while (output.length < targetLength) {
          output = '0' + output;
      }
      return output;
    }
    
    function covertSeconds(s){
      var hrs = Math.floor(s/3600);
      var min = Math.floor(s/60);
      var sec = s% 60;
      return leftPad(hrs,2) +":" + leftPad(min,2) + ":"+ leftPad(sec,2)
    }
    
     var timer = $("#timer").text(covertSeconds(timeleft - counter));
    
     function timeIt(){
       counter ++;
       timer.text(covertSeconds(timeleft - counter));
     };
     setInterval(timeIt, 1000)

【问题讨论】:

  • 仅供参考:setInterval 不准确
  • 您已经在sec = s % 60; 做了正确的事,但对minhrs 没有做任何事情。
  • 同意上面的,在你的定时器启动时设置一个带有时间戳的变量会更准确,然后使用日期对象在你的间隔中获取一个新的时间戳,并检查开始时间之间的差异和当前时间经过毫秒。然后对该产品进行数学计算以使其成型以进行展示。这样,即使 setInterval (或超时)漂移,您实际上并不依赖于每秒准确运行一次来​​获得准确的时间 - 它始终基于时间戳数学,因此当 setInterval 确实运行时,您可以获得准确的测量.

标签: javascript jquery


【解决方案1】:

正如 setInterval 中的 cmets 所述,不准确,您不应使用它。但是,我认为根据问题的标题,您的直接问题与不更新 convertSeconds 中的 seconds 变量有关,请参阅下面的可能修复:

const pad2 = x => String(x).padStart(2, '0');

const covertSeconds = s => {
  const h = Math.floor(s / 3600);
  s = s % 3600; 
  const m = Math.floor(s / 60);
  s = s % 60;
  return `${pad2(h)}:${pad2(m)}:${pad2(s)}`;
}

let counter = 0;
const timeleft = 36070;
const timer = $("#timer").text(covertSeconds(timeleft - counter));

const timeIt = () => {
  counter++;
  timer.text(covertSeconds(timeleft - counter));
  if (counter == timeleft) {
    clearInterval(intervalID);
  }
};

const intervalID = setInterval(timeIt, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="timer"></div>

【讨论】:

  • 请问如何阻止计时器输入负值,我可以使用什么来代替 setInterval。
  • @NwankwoFortune 查看更新的代码以获取使用clearInterval 阻止计时器输入负值的示例。至于不使用setInterval,请参考这个链接:来自cmets的stackoverflow.com/questions/19700283/…
猜你喜欢
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 2018-11-30
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多