1. ホーム
  2. javascript

[解決済み] 2014年12月31日に設定された新しいDate()は、代わりに12月1日を表示します。

2023-07-16 17:01:23

質問

文字列を日付オブジェクトに変換しようとしていますが、12月31日以外のすべての日についてうまくいき、オブジェクトは31日ではなく12月1日と表示します。私はなぜか分からない。以下は私の JavaScript のコードです。

var dt = new Date();
dt.setDate("31");
dt.setMonth("11");
dt.setFullYear("2014");

となっていますが、私の変数値は

Mon Dec 01 2014 11:48:08 GMT+0100 (Paris, Madrid)

他の日付に対して同じことをすると、私のオブジェクトは適切な値に戻ります。私が何を間違えたのか、何か心当たりはありませんか?

どのように解決するのですか?

setMonth の前に必要です。 setDate : ( 31日未満の月間は安全ではありません )

var dt = new Date();
dt.setFullYear(2014);
dt.setMonth(11);
dt.setDate(31);

そして setMonth の第2パラメータも日付を設定するために使用することができます。

var dt = new Date();
dt.setFullYear(2014);
dt.setMonth(11, 31);


コンストラクタに引数が与えられない場合は 現在の日付と時刻 を使用します。

そのため setMonthsetDate を別々に使用すると、やはり予期しない結果になります。

もし設定された値が がその論理的範囲より大きい場合 である場合、その値は自動的に に調整され、隣接する値 .

例えば、今日が 2014-09-30 であれば

var dt = new Date();
dt.setFullYear(2014); /* Sep 30 2014 */
dt.setMonth(1);       /* Mar 02 2014, see, here the auto adjustment occurs! */
dt.setDate(28);       /* Mar 28 2014 */

これを避けるには、コンストラクタを直接使って値を設定します。

var dt = new Date(2014, 11, 31);