web-dev-qa-db-ja.com

Intl APIを使用したタイムゾーンの取得はFirefoxでは機能しません:

Intl API を使用しています。 Chromeの場合:

 Intl.DateTimeFormat().resolved.timeZone

「ヨーロッパ/ロンドン」を返します

Firefoxでは、 FirefoxはIntlをサポートしています であっても、これはundefinedを返します。

Firefoxでタイムゾーンを取得するにはどうすればよいですか?

10
mikemaccana

技術的には、より正確な呪文は次のとおりです。

_Intl.DateTimeFormat().resolvedOptions().timeZone
_

残念ながら、現在すべての実装がIntlAPIのタイムゾーン機能をサポートしているわけではありません。そのため、これはChromeで有効なIANAタイムゾーンを返しますが、FireFoxや他のいくつかのブラウザではまだ返しません。

kangax Intl互換性テーブル は、この機能をresolvedOptions().timeZone defaults to the Host environmentというラベルの付いたDateTimeFormatオブジェクトの下のサブアイテムとして示しています。

次のFireFox作業項目を参照してください。

  • Bug 11587 -Javascript InternationalizationAPIからシステムのタイムゾーンを検出します
  • Bug 895737 --DateTimeFormatは現在のタイムゾーンを追跡しません
  • Bug 837961 -IANAタイムゾーン名のサポートを国際化APIに追加します

それまでの間、2つの実行可能な選択肢があります。

  • jsTimeZoneDetect -これはタイムゾーン推測のタスクに焦点を当てています。
  • moment-timezone -これは人気のある moment.js ライブラリのアドオンであり、ユーザーの時間を推測するためのAPI moment.tz.guess()が含まれていますゾーン。

これらは両方とも、追加の推測アルゴリズムを試す前に、Intl AP​​Iが使用可能で機能している場合、内部的に使用を試みることに注意してください。

また、ベストプラクティスは、タイムゾーンの検出/推測だけに依存するのではなく、タイムゾーンピッカーコントロールから適切なデフォルト値を選択するために使用することです。常にユーザーに希望のタイムゾーンを選択する方法を提供してください。現在コンピュータが設定されているタイムゾーンは、アプリケーション内で使用したいタイムゾーンである場合とそうでない場合があるため、これは重要です。たとえば、Webベースのカレンダーソフトウェア(GoogleカレンダーやOutlook.comなど)では、ユーザーがユーザープロファイルにタイムゾーンを設定できるようにするのが一般的です。

19