Chrome コンソールに入力するとnew Date("2017-01-01")
、出力では時間が 8 であると表示されますが、と の時間は両方とも 0 であるnew Date("2017-01-1")
とnew Date("2017-1-01")
表示されます。どのようにnew Date(dateString)
解析するのでしょうか?
new Date("2017-01-01")
// Sun Jan 01 2017 08:00:00 GMT+0800 (中国标准时间)*
new Date("2017-01-1")
// Sun Jan 01 2017 00:00:00 GMT+0800 (中国标准时间)*
new Date("2017-1-1")
// Sun Jan 01 2017 00:00:00 GMT+0800 (中国标准时间)*
new Date("2017-1-01")
// Sun Jan 01 2017 00:00:00 GMT+0800 (中国标准时间)*
ベストアンサー1
「2017-01-01」は
ISO標準 に準拠しています
ES5 日付時刻文字列形式 (ISO 8601 拡張形式の簡略化)したがって、これは UTC 時間であり、中国では午前 8 時です。その他の文字列はすべて、Chrome 1では現地時間として解析されます。
1 Chromium の関連ソースコード:https://cs.chromium.org/chromium/src/v8/src/dateparser-inl.h?type=cs&l=16
Chromium での日付解析は、標準の ES5 ルールに加えて、次の追加ルールに従います。
- 最初の数字の前の認識されない単語は無視されます。
- 括弧内のテキストは無視されます。
- 符号なしの数値の後に が続く場合は
:
時刻値であり、 に追加されますTimeComposer
。 が続く数値には::
、秒のゼロも追加されます。 が続く数値も.
時刻であり、ミリ秒が続く必要があります。その他の数値は日付コンポーネントであり、 に追加されますDayComposer
。 - 月の名前 (または実際には、月の名前と同じ最初の 3 文字を持つ任意の単語) は、
Day
作曲家の名前付き月として記録されます。 - タイムゾーンとして認識できる単語は、そのまま記録されます
(+|-)(hhmm|hh:)
。 - 従来の日付では、数字が読み取られた後に余分な記号 (
+
または-
) や不一致は許可されません(最初の数字の前では、どのようなゴミも許可されます)。)
- ES5 ルールと上記のルールを満たす文字列はすべて、ES5 ルールを使用して解析されます。つまり、
"1970-01-01"
ローカル タイム ゾーンではなく UTC タイム ゾーンになります。
それはどういう意味ですか?
まず、「2017-01-01」は「date-time」文字列ではなく「date」文字列であるため、UTC 時間で解析され、「date」文字列の ES5 定義に一致することに注意してください。時間が添付されている場合は、ISO 標準に従ってローカル時間で解析されます。
例:
2017-01-01
- 2017年1月1日(UTC時間)2017-01-01T00:00
- 2017年1月1日(現地時間)2017-1-1
- 2017年1月1日(現地時間)2017-(hello)01-01
- 2017年1月1日(現地時間)may 2017-01-01
- 2017年5月1日(現地時間)mayoooo 2017-01-01
- 2017年5月1日(現地時間)"jan2017feb-mar01apr-may01jun"
- 2017年6月1日(現地時間)