2017-11-14 15 views
0

私はその日付をISO文字列に変換すると、2015年11月30日を取得します。それはなぜ12月初めではないのですか?私はグーグルして、私はその月が0インデックスされ、オーバーフローが翌日/月/年につながることを知っています。しかし、私はその行動を自分自身で説明することはできません。私がgoogleすると、無関係なトピックが見つかります。12月1日の日付(2015,11,1)はなぜですか?

+5

、最高の推測では、あなたがグリニッジの東住んでいて、ISO文字列があるUTCであるということですあなたの現地時間より数時間遅れています。または、それ以外の方法です。 – JJJ

+0

[Cant relate](http://jsbin.com/fapiduruna/edit?console) –

+1

あなたが試したコードを投稿して評価することができます。また、ポインタについてはこの投稿を参照してください:https://stackoverflow.com/questions/3552461/how-to-format-a-javascript-date – SteveB

答えて

-1
var date = new Date(Date.UTC(2015, 11, 1)); 
console.log(date.toISOString()); 

出力:あなたが入力した場合

2015-12-01T02:00:00.000Z 
+2

実際には、出力は '2015-11-30T23:00:00.000Z'ですあなたのセットアップで。異なるユーザータイムゾーンを検討しているわけではありません。 – h2ooooooo

+0

さて、[Mozilla Docs](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)によると、「タイムゾーンは常にゼロのUTCオフセットです」 – ceferrari

+0

はいDateのMDN記事を見ると_passed_値は現地時間です。 – h2ooooooo

1

事は次のとおりです。

var date = new Date(2015, 11, 1); 
console.log(date); 

あなたは、あなたのタイムゾーンに基づいて出力を得るでしょう、私にとってそれはです:

Tue Dec 01 2015 00:00:00 GMT+0100 (Central Europe Standard Time) 

機能toISOStringは常に時刻を出力します UTC。この場合、この日付から1時間を引いた値になります。

2015-11-30T23:00:00.000Z 
0

あなたがチェックした場合MDN pageあなたはそれが表示されます:

注:日付が複数の引数を持つコンストラクタと呼ばれているは、specifed引数は現地時間を表します。 UTCが必要な場合は、新しい引数Date(Date.UTC(...))を使用してください。

ユーザーのローカルタイムゾーンが異なります。 私にとってnew Date(2015, 11, 1)Tue Dec 01 2015 00:00:00 GMT+0100 (Romance Standard Time)です(私はGMT + 1のタイムゾーン中央ヨーロッパ時間にいます)。

したがって、あなたは、MDNのヒントに従って、代わりにあなたの日付のコールの内側にDate.UTCを使用することができます。コードを見ることなく

var date = new Date(2015, 11, 1); 

console.log(date.toString()); 
// "Tue Dec 01 2015 00:00:00 GMT+0100 (Romance Standard Time)" 
//     00:00:00 in GMT+1 but 23:00:00 in GMT+0 

console.log(date.toISOString()); 
// "2015-11-30T23:00:00.000Z" 
//   ^^ 30th of november - that's a nogo! 

var utcDate = new Date(Date.UTC(2015, 11, 1)); 

console.log(utcDate.toString()); 
// "Tue Dec 01 2015 01:00:00 GMT+0100 (Romance Standard Time) 15:49:26.146" 
//     01:00:00 in GMT+1 but 00:00:00 in GMT+0 

console.log(utcDate.toISOString()); 
// "2015-12-01T00:00:00.000Z" 
//   ^^ The first! Not the 30th! 
関連する問題