3

カレンダーの作業中に問題が発生した理由を突き止めようとしているときに、この問題に遭遇しました。月を 8 に設定すると日付は 10 月に設定され、月を 9 に設定すると日付は 10 月に設定されます。テストするコード

var d = new Date();
document.write(d.getMonth());
d.setMonth(8);
document.write(d.getMonth());
d.setMonth(9);
document.write(d.getMonth());

output:
799

現在の日付は 2012 年 8 月 31 日です。JavaScript の月は 0 ベースであるため、月番号は 7 である必要があります。

誰かがこれを説明できますか?複数のコンピューターで再現できました。

4

1 に答える 1

3

9 月は 30 日しかありません - 日を 31 に設定 (またはある月の 31 日に日付を作成) し、月を 31 日未満の月に変更すると、JavaScript は日付を次の月にロールオーバーします (この場合は10月)。つまり、日付がオーバーフローします。

> var d = new Date()
> d
Fri Aug 31 2012 22:53:50 GMT-0400 (EDT)
// Set the month to September, leaving the day set to the 31st
> d.setMonth(8) 
> d
Mon Oct 01 2012 22:53:50 GMT-0400 (EDT)

// Doing the same thing, changing the day first
> var d = new Date()
> d
Fri Aug 31 2012 22:53:50 GMT-0400 (EDT)
> d.setDate(30)
> d
Thu Aug 30 2012 22:53:50 GMT-0400 (EDT)
> d.setMonth(8)
Sun Sep 30 2012 22:53:50 GMT-0400 (EDT)

簡単な答えは、今日の日付は 8 月 31 日で、9 月 31 日は 10 月 1 日だからです。

于 2012-09-01T02:53:39.873 に答える