2010-07-05 4 views
4

В основном этот скрипт вычитает StartTime из EndTime, используя плагин jQuery. Форма html заполняется стартовым и конечным временем в формате HH: MM, поле ввода заполняется результатом, оно работает, за исключением одной проблемы:Странная ошибка в этом сценарии расчета времени?

Если время начала с 08:00 до 09:59, оно просто возвращает странные результаты - результаты 10 часов, чтобы быть точным, почему?

Все остальные входы вычисляются правильно!

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

Всякий раз, когда у вас есть математические проблемы с номером 8, это то, что получение превращается в восьмеричной системе :)

номера, начинающиеся с 0are interpreted as octal numbers in Javascript.

Это не проблема из 01..07, потому что они одинаковы в обеих системах.

Но 08 и 09 не существует в системе, поэтому они возвращаются 0.

Также см this question, что также обеспечивает решение: Указать базовый параметр при выполнении ParseInt:

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

Когда номер начинается с нуля, стандарт ECMAScript позволяет реализацию ParseInt(), чтобы интерпретировать его как восьмеричное число или десятичное число, поэтому это может работать в одном браузере или нет на другом. Чтобы исправить это для всех, используйте «parseInt (startTime [0], 10)», который заставляет базу 10. –

+1

Спасибо, ребята, за ответ и объяснение. –

+0

У меня есть еще одна проблема с этим кодом, есть ведущее 0, когда минутная часть больше 10, поэтому она возвращает что-то вроде 11: 013, а не 11:13, может ли это быть исправлено с помощью математики или будет ли инструкция if исправлять это ? Например, если количество элементов> 2, удалите первый элемент? Я собирался просто выполнить PHP-скрипт, чтобы удалить это, когда форма отправлена, но она не выглядит хорошо для пользователя. –

 Смежные вопросы

  • Нет связанных вопросов^_^