减去 javascript 次

Substracting javascript times

我在 javascript 中减去时间时遇到了问题,尽管我已经用谷歌搜索了 2 天但没有任何运气:(

我正在尝试为问卷计时。 当用户开始问卷时,会记录一个时间戳。 当用户 finishes/clicks 提交一个新的时间戳被记录下来,减去这两个时间以找出用户花费了多少时间。

(对于这个例子,我一直在使用按钮...) 当我减去时得到 NaN - 我需要解析毫秒吗?

代码在这里:Click

这里:

var myVar = setInterval(myTimer, 1000);
 function myTimer(){
  var d = new Date();
  document.getElementById("demo").innerHTML = d.toLocaleTimeString();
 }

 function maal1(){
  var tid = new Date();
  document.getElementById("demoo").innerHTML = tid.getTime();
}

 function maal2(){
  var tid = new Date();
  document.getElementById("demooo").innerHTML = tid.getTime();
}

 function calc(){
  var tid1 = document.getElementById("demoo").value;
  var tid2 = document.getElementById("demooo").value;
  var tid3 = tid2 - tid1;
  document.getElementById("tident").innerHTML = tid3;
}
<p class="centercenter" id="demo">Henter...</p></br>

<button class="centercenter" onClick="maal1()">Tid 1</button></br>

<p class="centercenter" id="demoo"></p></br>

<button class="centercenter" onClick="maal2()">Tid 2</button></br>

<p class="centercenter" id="demooo"></p></br>

<button class="centercenter" onClick="calc()">Calc</button></br>

<p class="centercenter" id="tident">Calc here</p>

您可能应该使用外部库作为 moment.js 以帮助您实现这一目标

var tid1 = document.getElementById("demoo").value;
var tid2 = document.getElementById("demooo").value;

应该是

var tid1 = document.getElementById("demoo").innerHTML;
var tid2 = document.getElementById("demooo").innerHTML;

希望这对您有所帮助

首先,value 会让你 undefined 因为这不是输入。您需要使用 innerText 属性.

p 获取文本值

您实际上是在减去从 getElementById(...).innerText 中获得的字符串值。 您需要使用 Date 对象,因此您需要将字符串值转换为数字,然后将其传递给 Date 构造函数,如下所示:

var tid1 = new Date(parseInt(document.getElementById("demoo").innerText));
var tid2 = new Date(parseInt(document.getElementById("demooo").innerText));
var tid3 = tid2 - tid1;

关于 parseInt 方法的旁注

尽管使用 parseInt() 方法要小心。此方法将仅采用它在表达式中找到的最右边的数字,即使它不是一个有效的整体数字,例如:

var x = "5 Answers";
console.log(parseInt(x)); // Prints "5"

如果您的输入可能包含非数字字符,最好使用 Number 构造函数安全地转换为数字:

var x = "5 Asnwers";
var num = Number(x);
console.log(num); // Prints NaN
function calc(){
        var tid1 = parseInt(document.getElementById("demoo").innerHTML) || 0;
        var tid2 = parseInt(document.getElementById("demooo").innerHTML) || 0;

        var tid3 = tid2 - tid1;
        document.getElementById("tident").innerHTML = tid3;
}

你的 innerHTML 没问题,但它被当作一个字符串。字符串减去字符串 = NaN(不是数字)

解析为 int(或小数的 parseFloat),它应该可以工作。

(顺便说一句,我添加了 || 0 空字符串,我知道的边缘情况,但不会中断)