2013-01-10 225 views
0

我在我的JavaScript的一個奇怪的問題,看看下面我的代碼:的Javascript計算不正確

dateParts = document.getElementById('date').value.split('/'); 
newDays = 14; 
year = dateParts[2]; 
month = parseInt(dateParts[1]) - 1; 
day = parseInt(dateParts[0]) + parseInt(newDays); 
alert(dateParts[0]+" + "+newDays+" = "+day); 

,並承擔document.getElementById('date') = 07/01/2013

計算將給出一個正確的結果= 07 + 14 = 21

的計算工作全部正常,除了08/01/2013/09/01/2013

其中結果是08 + 14 = 14,有什麼想法這裏錯了什麼?

回答

3

由於您沒有在parseInt() s內使用radix,因此您的號碼被視爲八分。您需要調整您的parseInt()就像這樣:

month = parseInt(dateParts[1], 10) - 1; 
day = parseInt(dateParts[0], 10) + parseInt(newDays, 10); 
+0

感謝@Teemu的代碼:) – ggDeGreat

2

0809領先0導致JavaScript來承擔數爲八進制。由於這些值不是有效的八進制值,因此將它們視爲0.有關更多詳細信息,請參閱this question

調用parseInt時應始終使用基數來避免此問題。

+0

感謝您的鏈接,從未聽說過JavaScript中的八進制文件 – ggDeGreat

1

的功能是parseInt函數(STR,redix),如果parseInt函數值從0開始,假設基數爲8,以「09」,「08」是無效的,函數返回0。您需要調用像parseInt('08',10)這樣的函數來獲取正確的值。