5

これらの2 つの日付が異なるのはなぜですか:

var date1 = new Date();
date1.setFullYear(2012); // year (four digits)
date1.setMonth(10); // month (from 0-11)
date1.setDate(1); // day of the month (from 1-31)

var date2 = new Date(2012, 10, 1, 0, 0, 0, 0);

結果 :

Date 1 : Sat Dec 01 2012 14:56:16 GMT+0100
Date 2 : Thu Nov 01 2012 00:00:00 GMT+0100

一方、これら2 つの日付は等しい:

var date3 = new Date();
date3.setFullYear(2012); // year (four digits)
date3.setMonth(9); // month (from 0-11)
date3.setDate(1); // day of the month (from 1-31)

var date4 = new Date(2012, 9, 1, 0, 0, 0, 0);

結果 :

Date 3 : Mon Oct 01 2012 14:56:16 GMT+0200
Date 4 : Mon Oct 01 2012 00:00:00 GMT+0200

もう 1 つの質問は、なぜ dodate1.setMonth(10)が 12 月に日付を指定するのかということです (11 月にする必要があります)。

4

3 に答える 3

10

ついにそれを手に入れました。日付を現在の日付と時刻new Date()に設定します。つまり、10月31日(この記事の執筆時点)です。

次に、月を11月に設定しようとすると、どうしますか?11月は30日しかないので、12月に丸めます。

月の前の日を設定するように順序を変更すると、次のように機能します。

var date1 = new Date();
date1.setFullYear(2012); // year (four digits)
date1.setDate(1); // day of the month (from 1-31)
date1.setMonth(10); // month (from 0-11)

またはjbabeyの答えによって暗示されるように:

var date1 = new Date();
date1.setFullYear(2012); // year (four digits)
date1.setMonth(10, 1); // month (from 0-11) and day (1-31)

ドキュメントはそれほど明確ではありませんが、少なくとも示唆に富んでいます。

指定したパラメーターが予想範囲外の場合、setMonthはそれに応じてDateオブジェクトの日付情報を更新しようとします。たとえば、monthValueに15を使用すると、年は1(year + 1)ずつ増分され、3は月に使用されます。

(「したがって」は正確にはほど遠いですが、それは実装が少なくともほぼ間違いなく正しいことを意味します...)

于 2012-10-31T14:16:43.860 に答える
3

setMonth2番目のパラメーターを受け入れます:

dayValueパラメーターを指定しない場合、getDateメソッドから返された値が使用されます。

月を10(11月)に設定すると、現在の日の値(31)が取得され、それが日として設定されます。11月は30日しかないため、12月1日にロールオーバーします。

于 2012-10-31T14:17:29.163 に答える
0

現在の日付 ( ) を含む var を作成し、そのnew Date()キーの一部 (年、月、日) を変更しています。

一方、new Date(2012, 10, 1, 0, 0, 0, 0)「それらの正確な値で日付オブジェクトを作成する」ことを意味します。

それが、日付オブジェクトが等しくない理由です。

于 2012-10-31T14:12:22.443 に答える