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


116

タイムゾーンオフセットを取得する方法は知っていますが、「アメリカ/ニューヨーク」のようなものを検出する機能が必要です。それはJavaScriptからも可能ですか、それともオフセットに基づいて評価しなければならないことですか?


2
Jon Nylanderが書いた関数は次のとおりです。
yunzen

関連する回答は次のとおりです。stackoverflow.com
Douglas

回答:


239

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

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

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


6
これほどシンプルだとは思っていません
Mohammed Shareef C

5
すごい、最初に見たもので、瞬間を使わないもの!ありがとう
r0bb077

3
素晴らしいソリューション。このため、タイムゾーンプラグイン全体を含めたくありませんでした。
ジョーン・ギル

1
非常にシンプルで素晴らしいソリューション!
blackiii 2018

2
@DanielComptonああ、私はこのテーブルについて知らなかった、もう一度修正してくれてありがとう。
CommonSenseCode

9

最も投票された回答がおそらくタイムゾーンを取得する最良の方法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+07:00名前ではなくGMTオフセット(例:)を返します。しかし、私はそれがフォールバックとしてまだ読めると思います。

PSは、Intl...ソリューションとしてIE11では機能しません。


6

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

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

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

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

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

jstzをお楽しみください!


3

名前でタイムゾーンを取得します(「アメリカ/ニューヨーク」など)

moment.tz.guess();

9
:、それは依存せずに、単に可能であることを明記してくださいIntl.DateTimeFormat().resolvedOptions().timeZone
user2923322は

1
そうです、moment-jsは、その機能をサポートしない「ブラウザ」のTZも推測します。:)
Ferran Maylinch

IE11にIntl.DateTimeFormat().resolvedOptions().timeZone戻っていますundefinedが、moment.tz.guess()正しい値を返します
Antoni4

0

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

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

見る zone.name; // America/Los_Angeles

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


4
同じオフセットを有する複数のタイムゾーンに起因する、特に有用ではない
bmerigan

0

これは、GMT古いJavaScript のタイムゾーンコード(例:)を取得します(私は古いエンジンでgoogle appスクリプトを使用しています):

function getTimezoneName() {
  return new Date().toString().get(/\((.+)\)/);
}

誰かが必要な場合に備えて、これをここに配置しています。


1
UTC/ でしか機能しないと思いますGMT。他の人がスペルアウトされているようです。例えば、Pacific Daylight Time
Ian Dunn

-1

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

<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>

-5

javascriptでは、Date.getTimezoneOffset()メソッドは、現在のロケールのUTCからのタイムゾーンオフセットを分単位で返します。

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

Moment'timezoneは便利なツールです。 http://momentjs.com/timezone/

タイムゾーン間で日付を変換する

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

4
あなたはキューを理解していませんでした。
srsajid 2017年

3
コードサンプルは、元の質問とは関係ありません。このライブラリをどのように使用して、ユーザーの現在のタイムゾーンの名前を返しますか?
ジョーホワイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.