2016-11-03 4 views
11

moment.jsとモーメント-timezone.jsを使用した場合.jsファイル瞬間(時間帯)を使用して、ユーザーのブラウザからタイムゾーンを取得します

は私が検索したいクライアントのタイムゾーンを取得し、他のいくつかのタイムゾーンに変換するための最良の方法です何クライアントのタイムゾーンとは何かを調べ、後で彼の日時を他のタイムゾーンに変換します。

誰もこの経験がありますか?

答えて

5

var timedifference = new Date()。getTimezoneOffset();

これは、クライアントのタイムゾーンとの差をUTC時刻から返します。 これで好きなように遊んで回ることができます。

+11

これは、現在の*タイムゾーン*オフセット*を返します。タイムゾーンではありません。オフセットは、夏時間のようなものに基づいて変更することができます。 [タイムゾーンタグwiki]の "Time Zone!= Offset"(http://stackoverflow.com/tags/timezone/info)を参照してください。 –

+1

@ MattJohnsonの答えがこの質問に対する真の答えです。技術的には、タイムゾーンに関連するものではなく、オフセット関連であるため、この回答は間違っています(異なる概念)。 – dudewad

48

moment.jsを使用して、使用:

var tz = moment.tz.guess(); 

これは、米国太平洋時間帯のためAmerica/Los_Angelesとして、IANAのタイムゾーン識別子を返します。

documented hereです。引数として渡された日付で、ブラウザの時間とUTC 間の分の時間差を返しmoment(date).offsetUtc()

+0

[この回答](http://stackoverflow.com/a/16526897/634824)と[この回答](http://stackoverflow.com/a/18252251/634824)も参照してください。 –

+1

偉大な答え - Upvoted!また、 'momet-timezone'バージョン** 0.5.4 **以上を使用してください...もっと詳しい説明については、このスレッドに従ってくださいhttps://github.com/moment/moment-timezone/issues/324 – ymz

+0

+1。 tzフックを利用するために日付を使用している瞬間を確認してください。 https://momentjs.com/timezone/docs/ node.jsと一緒にインストールするには、このコマンド 'npm install moment-timezone'を使用し、' window.moment = require( 'moment-timezone'); ' –

0

注意。一つグローバルセットこの違いを、彼らは夏時間ゾーンにある場合、すべての日付のためにそれを使用しないでください:

// this is WRONG in daylight saving zones. don't do this! 
const OFFSET_UTC = moment().offsetUtc(); 

上記は、あなたが仕事のすべての日付に電流差を適用し、あなたがしている場合します夏時間帯の場合、残りの半年の日付は1時間遅れます。

私が正しくゾーンの夏時間の時間差を解析するために書いた小さな機能:

function toUtcMoment(date) { 
    return moment(date).add(moment(date).offsetUtc(), 'minutes').utc() 
} 

あなたは正しく、どのアプリケーションに(ブラウザのタイムゾーンでは常にある)datepickersから日付を渡すために上記を使用することができますUTCのタイムゾーンを使用します。

関連する問題