2010-07-05 2 views
4

기본적으로이 스크립트는 html : HH : MM 형식의 html 양식이 채워진 jQuery 플러그인을 사용하여 EndTime에서 StartTime을 뺍니다. 입력 필드에 결과가 입력되고 한 문제를 제외하면 작동합니다.이 시간 계산 스크립트의 이상한 버그?

시작 시간이 08:00에서 09:59 사이 인 경우 이상한 결과를 반환합니다. 정확한 결과는 10 시간입니다. 이유가 무엇입니까?

다른 모든 입력이 올바르게 계산됩니다. 당신은 숫자 8과 수학 문제를 가지고 때마다, 그것은 8 진수 시스템 :

숫자 0are interpreted as octal numbers in Javascript로 시작으로 변환하기 뭔가의

function setValue() { 
var startTime = document.getElementById('ToilA'); 
var endTime = document.getElementById('EndHours'); startTime = startTime.value.split(":"); 
var startHour = parseInt(startTime[0]); 
var startMinutes = parseInt(startTime[1]); 
endTime = endTime.value.split(":"); 
var endHour = parseInt(endTime[0]); 
var endMinutes = parseInt(endTime[1]); 
//var hours, minutes; 
var today = new Date(); 
var time1 = new Date(2000, 01, 01, startHour, startMinutes, 0); 
var time2 = new Date(2000, 01, 01, endHour, endMinutes, 0); var milliSecs = (time2 - time1); 
msSecs = (1000); 
msMins = (msSecs * 60); 
msHours = (msMins * 60); 
numHours = Math.floor(milliSecs/msHours); 
numMins = Math.floor((milliSecs - (numHours * msHours))/msMins); 
numSecs = Math.floor((milliSecs - (numHours * msHours) - (numMins * msMins))/ msSecs); numSecs = "0" + numSecs; numMins = "0" + numMins; DateCalc = (numHours + ":" + numMins); 

document.getElementById('CalculateHours').value = DateCalc; } 

답변

9

.

두 시스템에서 동일하기 때문에 01..07에서 아무런 문제가 없습니다.

그러나 0809은 시스템에 존재하지 않으므로 0을 반환합니다.

은 또한 같은 해결책을 제공 this question 표시 다음으로 parseInt 할 때 기본 매개 변수를 지정

parseInt("09", 10); // base 10 
+5

개수가 0으로 시작, ECMA 스크립트 표준으로 해석에서는 parseInt의 구현()을 허용 8 진수 또는 10 진수이므로 한 브라우저에서만 작동하거나 다른 브라우저에서 작동하지 않을 수 있습니다. 모든 문제를 해결하려면 "base 10을 강제 실행하는"parseInt (startTime [0], 10) "을 사용하십시오. –

+1

답변과 설명에 대해 감사합니다. –

+0

나는이 코드에 대해 한 가지 더 많은 문제가있다. 분 부분이 10을 초과하면 앞에 오는 0이 나오므로 11시 13 분이 아닌 11시 01 분을 반환한다. 수학으로 해결할 수 있는지 또는 if 문으로 해결할 수 있는가? ? 아이템 수가 2보다 많으면 첫 번째 아이템을 제거 하시겠습니까? 양식을 제출할 때 이것을 제거하기 위해 PHP 스크립트 만 사용하려고했지만 사용자에게는 좋지 않습니다. –