减去 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 空字符串,我知道的边缘情况,但不会中断)
我在 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 空字符串,我知道的边缘情况,但不会中断)