我的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
,这里有什么想法吗?
答案 0 :(得分:3)
您的号码被视为八进制,因为您未在parseInt()
内使用radix。您需要像这样调整parseInt()
:
month = parseInt(dateParts[1], 10) - 1;
day = parseInt(dateParts[0], 10) + parseInt(newDays, 10);
答案 1 :(得分:2)
0
和08
中的前导09
导致JavaScript假设该数字为八进制。由于这些值不是有效的八进制值,因此将它们视为0.有关详细信息,请参阅this question。
调用parseInt
时应始终使用基数来避免此问题。
答案 2 :(得分:1)
函数是parseInt(str,redix),如果parseInt中的值以0开头,则假设基数为8,因此'09','08'无效且函数返回0.您需要调用像parseInt('08',10)这样的函数来获得正确的值。