web-dev-qa-db-ja.com

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

タイムゾーンオフセットを取得する方法は知っていますが、必要なのは、「America/New York」のようなものを検出する機能です。 JavaScriptからでも可能ですか、それともオフセットに基づいてゲスト化する必要があるのでしょうか?

66
Mike Thomsen

国際化API はユーザーのタイムゾーンの取得をサポートし、現在のすべてのブラウザーで サポート です。

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

国際化APIをサポートする一部の古いブラウザバージョンでは、timeZoneプロパティがユーザーのタイムゾーン文字列ではなくundefinedに設定されることに注意してください。私が知る限り、執筆時点(2017年7月)で IE11を除くすべての現在のブラウザー はユーザーのタイムゾーンを文字列として返します。

127
Daniel Compton

このスクリプトを使用できます。 http://pellepim.bitbucket.org/jstz/

ここでリポジトリをフォークまたはクローンします。 https://bitbucket.org/pellepim/jstimezonedetect

スクリプトを含めると、タイムゾーンのリストを取得できます-jstz.olson.timezones変数。

また、次のコードを使用して、クライアントブラウザのタイムゾーンを決定します。

var tz = jstz.determine();
tz.name();

Jstzをお楽しみください!

6
sean

次のマッピングテーブルを使用して、独自のコードを簡単に記述できます。 http://www.timeanddate.com/time/zones/

または、moment-timezoneライブラリを使用します: http://momentjs.com/timezone/docs/

見る zone.name; // America/Los_Angeles

または、このライブラリ: https://github.com/Canop/tzdetect.js

2
advncd

最も投票された answer は、おそらくタイムゾーンを取得するための最良の方法ですが、Intl.DateTimeFormat().resolvedOptions().timeZoneは定義によりIANAタイムゾーン名を返します。これは英語です。

現在のユーザーの言語でタイムゾーンの名前が必要な場合は、Dateの文字列表現から次のように解析できます。

function getTimezoneName() {
  const today = new Date();
  const short = today.toLocaleDateString(undefined);
  const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });

  // Trying to remove date from the string in a locale-agnostic way
  const shortIndex = full.indexOf(short);
  if (shortIndex >= 0) {
    const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
    
    // by this time `trimmed` should be the timezone's name with some punctuation -
    // trim it from both sides
    return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');

  } else {
    // in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
    return full;
  }
}

console.log(getTimezoneName());

ChromeおよびFirefoxでテスト済み。

もちろん、これは一部の環境では意図したとおりに機能しません。たとえば、node.jsはGMTオフセットを返します(例:GMT+07:00)名前の代わりに。しかし、フォールバックとしてはまだ読みやすいと思います。

追伸IE11では、Intl... 解決。

1
mrnateriver

here からこのコードを参照してみてください

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
  $(document).ready(function(){
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

    alert(timezone);
});
</script>
1
Kumar Shanmugam