重複の可能性:
Javascript での 2 つの日付の初期化の違い
Javascript Date オブジェクトの初期化に関して奇妙な結果が得られます。2012 年 2 月 1 日を JavaScript の Date オブジェクトに初期化しようとしています。最初の方法はコンストラクターを使用することで、必要な結果が得られます (2012 年 2 月 1 日)。2番目の方法は、空のコンストラクターを使用し、各フィールドを設定することであり、得られる結果はまったく異なります。(2012 年 3 月 2 日)。この方法は、月を1月、3月、5月の月に設定すると機能します。ただし、月が 2 月、4 月、6 月の場合は失敗します。
以下のコードを参照してください。
コードの抜粋 1:
var year = 2012;
var mth = 1;
var dy = 1;
var hrs = 0;
var min = 0;
var sec = 0;
var ms = 0;
//Result here gives me 1st Feb 2012
var dt = new Date(year, mth, dy, hrs, min, sec, ms);
alert("Date 1 : " + dt.toString());
//Result here gives me 1st March 2012
var dt2 = new Date();
dt2.setFullYear(year);
dt2.setMonth(mth);
dt2.setDate(dy);
dt2.setHours(hrs);
dt2.setMinutes(min);
dt2.setSeconds(sec);
dt2.setMilliseconds(ms);
alert("Date 2 : " + dt2.toString());
なぜこれが起こっているのかを誰かが説明してくれれば幸いです。これは JavaScript のバグですか?
ありがとう。
================================================== ================================
更新: このスレッドで解決策を見つけました。 Javascript での 2 つの日付の初期化の違い
執筆時点での現在の日付は 2013 年 1 月 31 日です。DateTime() は現在の日付と時刻を提供するため、dt は 2013 年 1 月 31 日です。
したがって、dt.setMonth が最初に来ると、2013 年 1 月 31 日を 2013 年 2 月 31 日に設定しようとしますが、これは無効です。したがって、Javascript のデフォルトは 2013 年 3 月 31 日です。
次に dt.setDate が入り、Javascript は日付を 2013 年 3 月 1 日に変更します。Javascript で日付を設定する場合、順序が重要になります。