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内で基数を使用していないため、数値は 8 進数として扱われますparseInt()parseInt()次のように sを調整する必要があります。

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

先頭008and09により、JavaScript は数値が 8 進数であると想定します。これらは有効な 8 進数値ではないため、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 に答える