2016-08-24 2 views
0
내가 운 :(

Substracting 자바 스크립트 시간

나는 시간에 설문지를 시도하고있다없이 2 일 동안 인터넷 검색을했습니다에도 불구하고 자바 스크립트에서 시간을 substracting에 문제가

. 사용자가 시작 설문지에 타임 스탬프가 기록됩니다. 사용자가 완료/제출할 때 새 타임 스탬프가 기록되고 사용자가 소비 한 시간을 알아 내기 위해 두 번을 빼서

(이 예에서는 버튼 ...) 내가 NaN을 빼면 - 밀리 초를 구문 분석해야합니까?

여기 16,

코드 : 여기 Click

그리고 :

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

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

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

 
\t function calc(){ 
 
\t \t var tid1 = document.getElementById("demoo").value; 
 
\t \t var tid2 = document.getElementById("demooo").value; 
 
\t \t var tid3 = tid2 - tid1; 
 
\t \t 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>

답변

0
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 (숫자 아님)

구문 분석 (또는 소수 자릿수 parseFloat)하면 작동합니다.

+0

우수! 많은 좋은 대답 - 나는 이것을 위해 단순함을 좋아한다 :) 고마워요! –

+0

probs 없음. 재미있어! :) – Nunicorn

+0

"* 문자열 빼기 문자열 = NaN *"아니요. 빼기 연산자는 숫자에 피연산자를 강제하므로 문자열이 숫자로 변환되는 한 (* getTime *의 결과로) parseInt가 필요하지 않습니다. 진짜 문제는'var tid1 = document.getElementById ("demoo"). value;'로, 대신 .innerHTML 또는 .textContent를 사용해야합니다. – RobG

-1

당신은 아마 당신이 달성 할 수 있도록하기 위해 moment.js 같은 외부 라이브러리를 사용해야하는

+0

내가 그것을 체크 아웃 (덧붙여, 내가 || 0 널 (null) 문자열의 넣다, 내가 아는 가장자리 케이스하지만 비 분리를 추가했습니다)하지만 같은 간단한 작업에 대한 많은 비트를 보인다. 멋지다! –

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

해야 be

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

희망이이 입력되지 않습니다 당신에게 undefined를 얻을 것이다 먼저

+0

정답입니다. – RobG

1

, value을하는 데 도움이됩니다. innerText 속성을 사용하여 p에서 텍스트 값을 가져와야합니다.

기본적으로 getElementById(...).innerText에서 가져온 문자열 값을 뺍니다. 당신은 Date 객체를 사용해야합니다, 그래서 당신은 숫자로 문자열 값을 변환하고 다음과 같이 Date 생성자에 무언가를 전달해야에서는 parseInt에

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

보조 노트 방법

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 
+0

Date 객체를 만들 필요가 없으며 결과는 document.getElementById ("demoo")와 동일합니다. textContent - document.getElementById ("demooo"). textContent'. * innerText *는 사용중인 모든 브라우저에서 지원되지 않는 비표준 속성입니다. 대신 * innerHTML * 또는 * textContent *를 사용하십시오. – RobG

+0

@RobG 예 innerText와 관련하여 알고 있습니다. W3C 표준이 아니지만 최신 버전에서는 정상적으로 작동합니다. Firefox 45 이상에서 지원됩니다. 그러나 더 이상 동의 할 수 없으며,'innerText'가 사용되어서는 안되며,'innerHTML'이 더 좋은 선택입니다. 'textContent'는 IE에 문제가 있습니다. http://caniuse.com/#search=inner 텍스트 '날짜'와 관련하여 본인을 돕기 위해 축약 용으로 추가했습니다. 두 개의 새 오브젝트를 작성하여 성능에 영향을주지 않습니다. textContent만을 빼고 교육적인 가치가 없으며, 특히 초보자에게 이것을 대답으로 제시하십시오. – gdyrrahitis