2017-09-27 4 views
0

JavaScript API (new Date()).toString()を使用して、クライアントのタイムゾーンを検出していますか?しかし、私は別のWindowsクライアントが同じタイムゾーンの異なるタイムゾーン名を返すことがわかった。たとえば、クライアントがGMT + 0100の場合、次のようにタイムゾーン名を取得できます。 JavaScript - Date toStringタイムゾーン名をGMTの夏時間として返します

Mon Sep 25 2017 21:04:22 GMT+0100 (GMT Summer Time)

Mon Sep 25 2017 21:04:22 GMT+0100 (GMT Daylight Time)

一つの名前は夏が含まれており、別の名前には、夏時間が含まれています。このAPIをGMT Daylight Timeのような同じタイムゾーン名に戻すにはどうすればよいですか?

+2

Javascripts Date APIが吸うと、あなたは欲求不満から建物を離れます。ここでは、[moment.js](https://momentjs.com)とその素晴らしい[timezone](https://momentjs.com/timezone/)ライブラリを使用してください。コンクリートを惜しまない。 – Darkrum

+0

@Darkrumご連絡ありがとうございます。私たちは[jsTimezoneDetect](https://bitbucket.org/pellepim/jstimezonedetect)を使用して検出していますが、一部のDaylightまたはEngilsh以外のOSの間違ったタイムゾーンを検出します。このシナリオをサポートすると思いますか? – shengt

答えて

1

GMT夏時間のような同じタイムゾーン名を返すにはどうすればいいですか?

できません。 DateオブジェクトのToStringファンクションは、のインプリテーション固有の値を返します。理想的には、現在のロケールで人間が読める、タイムゾーンの名前が表示されますが、実際には何でも構いませんし、実装全体に一貫性はありません。

さらに、いずれの名前も正しくありません。イギリスの夏時間の正しい英語名は「英国夏時間」だけです。

しかし、あなたは完全にECMA国際化APIをサポートするだけで、新しい環境をターゲットにしている場合(ECMA-402)、その後、あなたがそうのように、ToLocaleString機能を使用することができます。

new Date().toLocaleString('en-GB', { timeZone: 'Europe/London', timeZoneName: 'long' }) 
//=> "27/09/2017, 06:00:20 British Summer Time" 

結果をする必要がありますそれが利用可能である場合、一貫性がある。これは比較的新しいAPIであり、古いブラウザでは実装されていないことに注意してください。

+0

ありがとうございました。現在のユーザーのクライアントのタイムゾーンを検出する方法を探したい。指定したAPIは、タイムゾーンがわかっているシナリオで使用できます。タイムゾーンを検出するために使用できる他の方法をご存知ですか? – shengt

+0

はい、それは何度か尋ねられ、答えられました。 [ここにそのような場所があります](https://stackoverflow.com/a/18252251/634824)。今後、[XY問題](https://meta.stackexchange.com/a/66378/201534)を避けるようにしてください。 :) –

関連する問題