2015-03-30 141 views
1

我试图自制JavaScript,并用秒表做了一些文本,但我迷失在这个问题中。它的工作,但它始终始于95:34:47而不是00:00:00尝试创建秒表时丢失了

这是我到目前为止尝试。

<script> 
     /*Timer Stuff*/ 
     function pad(num, size) { 
      var s = "0000" + num; 
      return s.substr(s.length - size); 
     } 
     function formatTime(time) { 
      var h = m = s = ms = 0; 
      var newTime = ''; 

      h = Math.floor(time/(60 * 60 * 1000)); 
      time = time % (60 * 60 * 1000); 
      m = Math.floor(time/(60 * 1000)); 
      time = time % (60 * 1000); 
      s = Math.floor(time/1000); 
      ms = time % 1000; 

      newTime = pad(h, 2) + ':' + pad(m, 2) + ':' + pad(s, 2) + ':' + pad(ms, 3); 
      return newTime; 
     } 

     function update() { 
      var d = new Date(); 
      var n = d.getTime(); 
      document.getElementById("time").innerHTML = formatTime(n); 
     } 

     function start() { 
      MyVar = setInterval(update, 1); 
     } 
    </script> 
</head> 
<body> 
     <div>Time: <span id="time"></span></div> 
     <input type="button" value="start" onclick="start();"> 
</body> 

我明白,我需要减去的时间,以精确匹配定时器的具体金额,但我无法弄清楚如何做到这一点。

+0

看看这里:http://stackoverflow.com/a/20319035/1887101 – Adjit 2015-03-30 19:48:22

+0

谢谢你的答案。虽然这对于像我这样的新手来说有点太混乱,我一直在寻找不需要删除我的整个代码的东西。不过,我会试着了解它是如何工作的,谢谢。 – Saelyth 2015-03-30 19:52:54

回答

3

您需要存储与开始时间的变量,并从减法。你在工作时间得到的95实际上要高得多,只是裁剪而已,因为你是从Unix时代开始计算的。

我只是做了这样的事情:

function update() { 
     var d = new Date(); 
     var n = d - startTime; 
     document.getElementById("time").innerHTML = formatTime(n); 
    } 

    function start() { 
     startTime = new Date(); 
     MyVar = setInterval(update, 1); 
    } 

注意,你甚至不需要使用d.getTime()减去时 - 你可以减去Date对象本身。

+0

Doh,现在有道理!谢谢你的答案。 – Saelyth 2015-03-30 19:57:30

1

你必须引入一个启动时间变量。 在每一个更新步骤中,您都必须从开始到现在都有所不同。

为您的代码:

<script> 
    /*Timer Stuff*/ 
    timestart = new Date(); 
    timestart_time = timestart.getTime(); 

    function pad(num, size) { 
     var s = "0000" + num; 
     return s.substr(s.length - size); 
    } 
    function formatTime(time) { 
     time = time -timestart_time; 
     var h = m = s = ms = 0; 
     var newTime = ''; 

     h = Math.floor(time/(60 * 60 * 1000)); 
     time = time % (60 * 60 * 1000); 
     m = Math.floor(time/(60 * 1000)); 
     time = time % (60 * 1000); 
     s = Math.floor(time/1000); 
     ms = time % 1000; 

     newTime = pad(h, 2) + ':' + pad(m, 2) + ':' + pad(s, 2) + ':' + pad(ms, 3); 
     return newTime; 
    } 

    function update() { 
     var d = new Date(); 
     var n = d.getTime(); 
     document.getElementById("time").innerHTML = formatTime(n); 
    } 

     function start() { 
      MyVar = setInterval(update, 1); 
     } 
    </script> 
</head> 
<body> 
     <div>Time: <span id="time"></span></div> 
     <input type="button" value="start" onclick="start();"> 
</body> 

这对我的作品:)

相关问题