2017-03-02 7 views
1

をインデックス化ゼロインデックス付き月ので、日付はゼロでは、私が知っている

Thu Mar 02 2017 

のために私は、変数を使用する場合

new Date(2017, 2, 2); 

に同じことを書かなければなりません私が言う場合

var thismonth = 2; new Date(2017, thismonth, 2); 

しかし、

var thisday = [2017, 2, 2]; new Date(thisday); 

私はこれは意味、私は実際の生活の中で

var thisday = [2017, 3, 2]; new Date(thisday); 

を日付-VARSのような配列-VARSを使用することができますし、(取得

Thu Feb 02 2017 

1インデックス付けヶ月で結果を取得しますun)期待結果

Thu Mar 02 2017 

すごく混乱しています。なぜこの動作?ルールはありますか?

答えて

0

これは興味深い発見です!しかし、[2017, 3, 2]のような値の配列を受け入れる文書化されたDateコンストラクタはありません。したがって、この場合に得られるものは、あなたが頼りにするものではありません。あなたの例の中でそれを見ることができます

、最初のものだけが文書化されています https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date

0

私はコードはあなたはそれがない何を考えていないと思います。 Dateコンストラクタは配列を受け入れません。引用符を付けてください。spec

vを指定しますか? ToPrimitive(値)。

タイプ(V)が文字列である場合、

テレビが解析法(20.3.3.2)の場合と全く同様に、日付としてVを解析した結果とします。解析が突然完了した場合、tvは完了レコードです。

これは、実際には2017,3,2を文字列として渡すことを意味します。今、その文字列はどうなりますか?さて、もう一度specを確認してください。

それ以外の場合、解析結果のStringは日付と時刻として解釈されます。日付と時刻に対応するUTC時刻値である数値を返します。ストリングは、ストリングの内容に応じて、ローカル時間、UTC時間、または他のいくつかのタイムゾーンの時間として解釈されます。この関数は、Date Time String Format(20.3.1.16)で呼び出された規則(拡張された年を含む)に従ってStringの書式を解析します。

興味深い、spec

への別のリンクはあなたの形式は、私たちが戻って

た場合を言う前の仕様のセクションにいる意味YYYY-MM-DDTHH:mm:ss.sssZ形式または日付のみYYYY-MM-DDに従っていません。 Stringがその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式に戻ります。

だから、基本的にそれに頼るべきではありません。 JSエンジン/ブラウザによっては、日付がまったく解析されないことがあります。 V8では、区切り記号としてコロン/ダッシュだけでなく、カンマも使用できるように見えます。

編集:それは

https://github.com/v8/v8/blob/68960eeb763f93dcedb37d5b663b1019192b7f36/src/builtins/builtins-date.cc#L115

したい場合は検索を保つために、コメントと奇妙なものがたくさんある

https://github.com/v8/v8/blob/68960eeb763f93dcedb37d5b663b1019192b7f36/src/dateparser-inl.h#L16

を呼び出すました。

関連する問題