2016-09-01 4 views
1

誰かがjavascriptの新しい日付( '')解析を理解できますか?あなたがmoment.jsを使用している場合JavaScriptの日付を解析する理由

_date = Fri Oct 14 2016 17:00:00 GMT-0700 (US Mountain Standard Time) {} 

なく

Oct 15 2016 

に等しいと等しい

var _date = new Date('2016-10-15'); 

たとえば、なぜこれがある

var _testdate = moment('2016-10-15').toDate(); 

_testdate = Sat Oct 15 2016 00:00:00 GMT-0700 (US Mountain Standard Time) {} 
+2

渡された日付文字列はISO UTCの日付と解釈されるため、7時間先です。あなたが文字列を取得すると、それは現地時間で行われます。 – Pointy

+1

早起きしてもう一度コードを試してみたら、うまくいくでしょう:) – Pointy

+0

それでは、どうやってUTCと解釈されず、moment.jsのように動作するのですか?私は自分自身に非常に相対論的です。私はあなたの時間が特に光の速度に近づいている私の時間と同じではないことを知っていますが、私はあなたを気にしません:P – Watson

答えて

3

「2016-10-15」のような日付のみの形式は、dateコンストラクタとDate.parseによってUTCとして扱われるのに対し、moment.jsのようなライブラリはISO 8601と一貫しており、ローカルとして扱います。

システムがUTC-0700に設定されているため、 '2016-10-15'は2016-10-15T00:00:00Z(つまりUTC + 0000)と扱われます。これは2016-10-14です17: 00:00となります。

+0

そして、この動作を無効にするために、Date構造に渡すことができるオーバーライド関数や変数はありませんか?日付のみの形式ではなく、日付のみの形式になるように文字列を作成することは可能ですか? – Watson

+0

@ワトソンとはい。 Dateオブジェクトは時間値(エポックからのms)です。それ以外は何もありません。 ISO 8601拡張フォーマット文字列の解析は[* ECMA-262 *](http://ecma-international.org/ecma-262/7.0/index.html#sec-date.parse)で指定されています。他の解析は実装に依存するため、常に手動で解析することを強くお勧めします。ライブラリを使用している場合は、常に構文解析のためにフォーマットを渡してください。 – RobG