Date.parse が間違った結果を返すのはなぜですか? 質問する

Date.parse が間違った結果を返すのはなぜですか? 質問する

ケース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.parsenew Date(string)Date#toString

Date#toStringECMAScript 2017 (エディション 8) の時点では、実装ではおよびの出力を解析する必要がありましたDate#toUTCStringが、それらの文字列の形式は指定されていませんでした。

ECMAScript 2019(第9版)では、Date#toStringそしてDate#toUTCStringはそれぞれ次のように指定されています。

  1. ddd MMM DD YYYY HH:mm:ss ZZ [(タイムゾーン名)]
    例: Tue Jul 10 2018 18:39:58 GMT+0530 (IST)
  2. 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
}

おすすめ記事