1 ~ 31 の範囲外の値は、 への引数としては無効Date#setDate
です。代わりにDate#setTime
andを使用できます。Date#getTime
var TI_DAY = 1000*60*60*24; //convenience constant; use any notation you like
///
var dtVal = new Date(tmpEarTxt.value);
dtVal.setTime(dtVal.getTime() + 30 * TI_DAY);
また、正しい文字列を Date コンストラクターに渡すようにしてください。有効な形式のリストについては、Date.parse
および参照されている仕様を参照してください。
次の形式が許可されます。最初のものは ES1 以降で動作し、後者は ES5 以降でのみ動作します (2 行目と 5 行目は IE8 でテストされ、サポートされていません)。
Mon, 25 Dec 1995 13:30:00 GMT
1997-07-16T19:20:30.45+01:00
1997-07-16T19:20:30+01:00
1997-07-16T19:20+01:00
1997-07-16 (year-month-day)
1997-07
1997
したがって、すべての場所でのみnew Date("25 Dec 1995")
動作します(IE8、IE9、FF、Chrome で
new Date("1995-12-25")
テスト済み) は、IE (IE8、IE9、FF、Chrome でテスト済み) を除くすべての場所で
new Date("12-25-1995")
動作し、Chrome と IE では動作しますが、Firefox では動作しません。さらに、IE (ただし Chrome ではない) では、日と月の両方のオーバーフローが許可され、次に大きいメジャーがインクリメントされますが、最後の形式 (MDN によって承認されていない形式) を解析する場合に限られます。年が 1900 年を下回ることさえあります。