ケース1:
new Date(Date.parse("Jul 8, 2005"));
出力:
2005 年 7 月 8 日金曜日 00:00:00 GMT-0700 (PST)
ケース2:
new Date(Date.parse("2005-07-08"));
出力:
2005 年 7 月 7 日 (木) 17:00:00 GMT-0700 (PST)
2 番目の解析が間違っているのはなぜですか?
ベストアンサー1
第5版の仕様が出るまでは、Date.parse
メソッドは完全に実装に依存しnew Date(string)
ていました(Date.parse(string)
ただし後者は ではなく数値を返しますDate
。第5版の仕様では、 をサポートするために要件が追加されました。簡略化された(そして少し間違っている) ISO-8601(こちらも参照)JavaScript で有効な日付時刻文字列とは何ですか?)。しかし、それ以外には、出力が何であっても受け入れる必要がある(それが何であるかは言わない)ということ以外に、/ が受け入れるべきものについての要件はありませんでした。Date.parse
new Date(string)
Date#toString
Date#toString
ECMAScript 2017 (エディション 8) の時点では、実装ではおよびの出力を解析する必要がありましたDate#toUTCString
が、それらの文字列の形式は指定されていませんでした。
ECMAScript 2019(第9版)では、Date#toString
そしてDate#toUTCString
はそれぞれ次のように指定されています。
- ddd MMM DD YYYY HH:mm:ss ZZ [(タイムゾーン名)]
例: Tue Jul 10 2018 18:39:58 GMT+0530 (IST) - ddd, DD MMM YYYY HH:mm:ss Z
例: Tue 10 Jul 2018 13:09:58 GMT
新しい実装で確実に解析できる2 つの形式をさらに提供しますDate.parse
(サポートが普遍的ではなく、非準拠の実装がしばらく使用され続けることに注意してください)。
日付文字列は手動で解析し、日付コンストラクタ曖昧さを避けるために、年、月、日の引数とともに使用します。
// parse a date in yyyy-mm-dd format
function parseDate(input) {
let parts = input.split('-');
// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based
}