0

我的 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,知道这里有什么问题吗?

4

3 回答 3

3

您的数字被视为八进制,因为您没有在s 中使用基数。parseInt()你需要parseInt()像这样调整你的 s :

month = parseInt(dateParts[1], 10) - 1;
day = parseInt(dateParts[0], 10) + parseInt(newDays, 10);
于 2013-01-10T07:35:36.770 回答
2

0引入08并导致09JavaScript 假定该数字是八进制的。由于这些不是有效的八进制值,因此将它们视为 0。有关详细信息,请参阅此问题。

调用时应始终使用基数parseInt以避免此问题。

于 2013-01-10T07:36:12.503 回答
1

函数是parseInt(str, redix),如果parseInt中的值以0开头,则假设基数为8,所以'09','08'无效,函数返回0。需要调用函数像 parseInt('08', 10) 来获得正确的值。

于 2013-01-10T07:48:13.830 回答