web-dev-qa-db-ja.com

オフセット値を使用してタイムゾーンの略称を取得する

Moment.js(moment-timezoneを使用)を使用して、現在のロケールのタイムゾーンの省略形(PSTなど)を取得します。

_var now = Date.now(); // 1423254073931
var zone = moment(now).zone(); // 480
var timezone = 
_

タイムゾーンの省略形を取得するにはどうすればよいですか?ドキュメントや他の場所で見たすべての例では、_"America/New_York"_のような特定の領域を選択しています。

ドキュメントから、_ Zone Object からzone.abbr(timestamp)を使用して情報を取得できるようですが、ゾーンオブジェクトにアクセスする方法がわかりません。

JSFiddle

15
thetallweeks

タイトルと質問が異なります。タイトルでは、オフセットを使用してそれを取得する方法を尋ねます-これは不可能です。同じオフセットを共有する多くのタイムゾーンがあるため、タイムゾーンの省略形とオフセットのみを区別することはできません。

しかし、質問では、特定のタイムスタンプについて、現在のロケールの省略形を取得する方法を尋ねました。

一般的な問題は、現在のタイムゾーンを検出する完全に信頼できる方法がないことです。これについては this answer で説明します。そのため、moment-timezoneは、デフォルトでロードするタイムゾーンを決定論的に判断できません。

ただし、他にもいくつかのオプションがあります。

  • 一部のブラウザでは、 ECMAScript Internationalization API 拡張機能がtoLocaleStringオブジェクトの Date 関数でサポートされています。サポートされている場合、これを(瞬間なしで)実行できます。

    var d = new Date(); // or whatever date you have
    var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split(' ').pop();
    

    サポートされているブラウザでは、「EST」のような値が表示されます。ただし、一部のブラウザでは機能しないため、何らかのテストを実行することをお勧めします。

  • jsTimeZoneDetect のようなスクリプトを使用して、ローカルタイムゾーンで推測できます。 通常は正しいですが、保証されていません。次に、その値をmoment-timezoneに渡すことができます。

    var tzName = jstz.determine().name();
    var m = moment();
    var abbr = m.tz(tzName).zoneAbbr();  // or .format('z')
    
  • moment-timezone のタイムゾーン検出/推測の組み込みサポートもあります。

    var tzName = moment.tz.guess();
    var abbr = m.tz(tzName).zoneAbbr();  // or .format('z')
    
33

Moment.jsの最新ビルドは、タイムゾーンを推測します: PR#22 例:moment.tz.guess(); will result in 'America/New_York'

5
star18bit