bug étrange dans ce script de calcul du temps?
-
02-10-2019 - |
Question
En gros ce script soustraira StartTime de EndTime, en utilisant un jQuery plug-in le formulaire HTML est rempli avec début et de fin dans le format HH: MM, un champ de saisie est renseignée avec le résultat, cela fonctionne sauf un problème:
Si le temps de démarrage est 8:00-9:59 juste renvoie des résultats étranges - résultats sont 10 heures de congé pour être précis, pourquoi
Toutes les autres entrées calculer correctement!
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; }
La solution
Chaque fois que vous avez des problèmes de mathématiques avec le numéro 8, il est quelque chose se converti dans le système octal:)
Les chiffres commençant par 0
sont interprétées comme des nombres octaux en Javascript .
Il n'y a pas de problème de 01..07
, parce qu'ils sont les mêmes dans les deux systèmes.
Mais 08
et 09
n'existent pas dans le système, de sorte qu'ils reviennent 0
.
Voir aussi cette question qui fournit également une solution: Spécifiez la base paramètre lorsque vous faites le parseInt:
parseInt("09", 10); // base 10