web-dev-qa-db-ja.com

JavaScriptの有効な日時文字列とは何ですか?

JavaScriptで_new Date_または_Date.parse_を使用する場合、任意の日付形式を渡すことはできません。フォーマットに応じて、日付オブジェクトの代わりに、または_Invalid Date_とは異なる日付を取得します。一部の日付形式は1つのブラウザーで機能しますが、他のブラウザーでは機能しません。それでは、どの日付時刻形式を使用する必要がありますか?

追加の質問:

  • すべてのブラウザが同じ形式をサポートしていますか? Mozilla Firefox、Google Chrome、Microsoft Internet Explorer、Microsoft Edge、およびApple Safariは日付文字列をどのように処理しますか?Node.jsはどうですか?

  • ローカルの日付形式が考慮されますか?例えば。私がスイスに住んでいて、日付形式が2018年7月30日である場合、new Date('30.07.2018')を使用できますか?

  • ローカルタイムゾーンが考慮されますか?

  • 日付オブジェクトから日付時刻文字列を取得するにはどうすればよいですか?

  • 無効な日時文字列を検出するにはどうすればよいですか?

  • Moment.jsのような日付ライブラリは、日付文字列をどのように処理しますか?

あなたが気付かなかった場合、私は自分の質問に答えました( なぜ? )。

12
str

それでは、どの日付時刻形式を使用する必要がありますか?

一般的な推奨事項は、信頼性が低いため、組み込みパーサーをまったく使用しないことです。したがって、「should」に対する答えは「none」です。 Date.parseが間違った結果を返すのはなぜですか?

ただし、strが示すように、ECMA-262で指定された形式をタイムゾーンとともに使用できます:YYYY-MM-DDTHH:mm:ss.sssZまたはYYYY-MM-DDTHH:mm:ss.sss±HH:mm、他の形式を信頼しないでください。

すべてのブラウザは同じ形式をサポートしていますか?

いや.

Mozilla Firefox、Google Chrome、Microsoft Internet Explorer、Microsoft Edge、およびApple Safariは日付文字列をどのように処理しますか?

異なる。 ECMA-262の形式以外は実装依存であり、ECMA-262形式の解析にはバグがあります。

Node.jsはどうですか?

再び異なる可能性が高い、上記を参照してください。

ローカルの日付形式が考慮されますか?例えば。私がスイスに住んでいて、日付形式が2018年7月30日である場合、新しいDate('30 .07.2018 ')を使用できますか?

多分。標準形式ではないため、解析は実装に依存するため、多分そうではないかもしれません。

ローカルタイムゾーンが考慮されますか?

文字列がローカルとして解析されるホストタイムゾーンオフセットを使用し、ローカル時間を使用して表示される文字列を生成します。それ以外の場合は、UTCを使用します(内部時間値はUTCです)。

日付オブジェクトから日付時刻文字列を取得するにはどうすればよいですか?

Date.parse.toString 、または を参照してくださいJavaScriptでの日付のフォーマットに関するドキュメント?

無効な日時文字列を検出するにはどうすればよいですか?

最初の3つの答えの1つ here が答えるはずです。

Moment.jsのような日付ライブラリは、日付文字列をどのように処理しますか?

デフォルトまたは指定された形式に基づいて解析します。ソースを読んでください(例 fecha.js は、よく書かれた、わかりやすいコードを備えたシンプルなパーサーおよびフォーマッターです)。

パーサーを書くのは難しくありませんが、入力形式を推測しようとすると(組み込みパーサーが行う傾向がある)、実装間で複雑で信頼性が低く、一貫性がありません。そのため、入力文字列がパーサーのデフォルト形式でない限り、パーサーは形式を提供する必要があります。

PS

実装がECMAScript 2019(現在ドラフトでは)で解析とフォーマットをサポートしなければならない文字列のフォーマットに変更がありますが、組み込みパーサーを回避するための一般的なアドバイスはまだしばらく続くと思います。

1
RobG