Help us understand the problem. What is going on with this article?

JavaScript でタイムゾーン名を取得する方法

More than 5 years have passed since last update.

JavaScript で Asia/TokyoAmerica/Los_Angeles のような IANA Time Zone Database で定義されたタイムゾーン名を取得する方法ですが、

結論

結論から言うと、正確に取得する方法はありません。

JavaScript の Date には、タイムゾーン名を取得する API がないからです。

var date = new Date();
date.toString();           // => "Fri Sep 19 2014 04:49:59 GMT-0700 (Pacific Daylight Time)"
date.getTimezoneOffset();  // => 420
  • Date を文字列化すると夏時間も考慮したタイムゾーンの名前が出力されて惜しい感じですが、仕様が決まっているわけではないのでブラウザ毎に違っていて使えません
  • Date.getTimezoneOffset() は、UTC からのオフセットを分単位(でも正負は逆)で返しますが、タイムゾーン名を引けるわけではないのでやはり使えません。一口に UTC-0700 といっても、夏時間のある・なしを加味してその地域を特定するのは厄介な問題です

代替案

とはいえ、世の中には同じ問題を抱えている人がいるもので、ブラウザ実行環境のタイムゾーンを予測するライブラリは存在します。

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

// (UTC+09:00) 大阪、札幌、東京
//     => "Asia/Tokyo"
// (UTC-08:00) 太平洋標準時 (米国およびカナダ)
//     => "America/Los_Angeles"
// (UTC-07:00) 山地標準時 (米国およびカナダ)
//     => "America/Denver"
// (UTC-07:00) アリゾナ
//     => "America/Phoenix"

あらかじめライブラリ内に定義した地域ごとの夏時間の有無やオフセットの情報と、Date.getTimezoneOffset() などを組み合わせて、最もそれらしい地域を算出しているようです。

アリゾナは夏時間を採用していない珍しい州なのですが、UTC からのオフセットが同じ7時間の山地標準時ときちんと区別できていることが分かります。すごいです。

注意事項

  • jsTimezoneDetect は、本家にも書いてあるとおり、タイムゾーンが完全に同じ地域の都市(ex. ベルリンとストックホルム)を区別できるわけではないので、そのような用途には向きません。 「ユーザーにタイムゾーン名を指定させたくないけど、サーバー側でユーザーの(ローカル時間に従った日時計算をするために)タイムゾーン名を知りたい」 という用途で効果を発揮すると思います
  • 私もまだがっつり使ったわけではないので、確実にオススメできる情報というわけではありません。試してみた範囲ではわりと正確に予測できていると思いますが、自己責任でご利用ください(メンテナンスも止まってしまっている模様)
oohira
rakus
「IT技術で中小企業を強くします!」というミッションを掲げ、中小企業の業務効率化に貢献する複数のクラウドサービスを提供しているIT企業です。「楽楽精算」「メールディーラー」など、国内トップシェアを誇る複数のサービスを開発し、累計導入社数は5万社を超えています。次の時代の"楽"を創るための、まだ見ぬサービスや機能を生み出す取り組みは、今日も続いています。
https://www.rakus.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした