2017-03-07 5 views
0

ダッシュで区切られた日付で次のような行動を誰でも説明できますか?Javascriptの興味深い特質

console.log(new Date('2015/03/03')); 
Tue Mar 03 2015 00:00:00 GMT+0000 (GMT Standard Time) 

console.log(new Date('2015-03-03')); 
Tue Mar 03 2015 00:00:00 GMT+0000 (GMT Standard Time) 

console.log(new Date('2015/04/03')); 
Fri Apr 03 2015 00:00:00 GMT+0100 (GMT Daylight Time) 

console.log(new Date('2015-04-03')); 
Fri Apr 03 2015 01:00:00 GMT+0100 (GMT Daylight Time) // This is the weird one 

注:私はイギリスにいるので、冬はGMT + 0、夏はGMT + 1です。

注2:「/」をセパレータとして使用する必要があります。特にIE11はそうではありませんが、Chromeでどのように起こるのか不思議です。

注3:NodeJSではさらに怪我をします。

console.log(new Date('2015/03/03')); 
2015-03-03T00:00:00.000Z 

console.log(new Date('2015-03-03')); 
2015-03-03T00:00:00.000Z 

console.log(new Date('2015/04/03')); 
2015-04-02T23:00:00.000Z //This is the weird one this time 

console.log(new Date('2015-04-03')); 
2015-04-03T00:00:00.000Z 
+0

8601は、1つの真のパスです。 [関連xkcd](https://xkcd.com/1179/) – cloudworks

+0

@cloudworks ...どのECMAScriptが完全に従っていないのですか? : –

+0

ありがとうございます。重複したリンクは本当に答えになります。 – Chexpir

答えて

3

それは奇妙なようで、日付の一部が部分的にISO日(ダッシュあり)として解釈され、それらがUTCとして解釈取得、およびその他の魔法の解析され、ローカルタイムゾーンとして解釈されますので、それはです。あなたに間違ったデータを置くので、私は常にすべての可能な誤解を避けるために、常に明示的に、常に厳密な検証のためのmoment()に3番目の引数としてtrueを使用して期待しているフォーマットを提供すると、日付の解析のためのMomentを使用することをお勧めする理由です

データベースはクラッシュするよりも悪く、日付は多くの場所で重要なことがあります。

例:

console.log(moment('2015/03/03', 'YYYY/MM/DD', true).toISOString()); 
2015-03-02T23:00:00.000Z 

console.log(moment('2015-03-03', 'YYYY-MM-DD', true).toISOString()); 
2015-03-02T23:00:00.000Z 

console.log(moment('2015/04/03', 'YYYY/MM/DD', true).toISOString()); 
2015-04-02T22:00:00.000Z 

console.log(moment('2015-04-03', 'YYYY-MM-DD', true).toISOString()); 
2015-04-02T22:00:00.000Z 

あなたが見ることができるように、ここには驚き。日付を検証する方法および理由詳細については

、この回答を参照してください。

関連する問題