2016-10-18 7 views
0

イベントのカウントダウンを作成しています。それは、同じタイムゾーンAmerica/New_Yorkでうまく動作しますが、これを別のタイムゾーンでどのように実現するかはわかりません。私は、ユーザーの時間帯に基づいて秒数を追加/減算する必要があると思います。私は、サーバーが返す秒数は常にESTになることを考慮しています。誰かに助言することはできますか? これまでのところ、私はこれを持っているが、私はエラーを取得しています:すべてのモーメントとモーメントタイムゾーンを使用して、イベントまで残っている秒数を計算します。

let serverZoneTime = new moment().tz.zone("America/New_York").offset(now); 
let currentZoneTime = moment.tz.guess().offset(now); 

console.log((EstTzOffset - currentTz)); 
+0

カウントダウンの場合は、「このイベントまで残っている秒数をサーバーに伝えています」と言っているので、ここでタイムゾーンを考慮する必要はないと思っています。サーバーが「シャトル打ち上げに10分"それはロンドンや東京の誰かがカナリア島の貧しいチャーリーと同じくらいになるだろう。サーバーがイベントに絶対ダニを返すようにすればいいよ。 – Viney

+0

@Novice本当に申し訳ありません。カウンターがうまくいけば、私は質問をうんざりしました。午後6時には、残りの秒数に基づいてメッセージを表示する必要がありますので、タイムゾーンで時間を秒単位で追加/減算するにはどうすればよいですか? – sayayin

+0

あなたのタイムゾーンを得ることができれば簡単な問題のように見えますが、問題はTですDSTのための帽子、タイムゾーンのオフセットは年間を通して一定ではありません。私は手動計算のために行ってはいけないことを示唆していますmoment.jsは[** this **](http:// stackoverflow。 com/questions/29265389/how-do-i-calculate-the-difference-of-2-time-zones-in-javascript)は、詳細を記述し、シンプルで効果的なソリューションを提供します。 – Viney

答えて

0

まず、これは特定の日の午後6時からのイベントである場合、私は時間を開始し、そのイベントの正確なタイムスタンプまたはUTC時間になるだろう。以下、私は偽のタイムスタンプを使用しています。

イベントを視聴しているユーザーが、「今」(上で使用している)とイベントの日の午後6時の間で、ESTからDSTに変更できるため、これは重要です。

すでにカウントダウンが動作しているように聞こえますが、タイムゾーンの問題だけでカウントダウンロジックをスキップします。カウントダウンのために

const moment = require('moment-timezone'); 

// Get User's Timezone 
const userTimezone = moment.tz.guess(); // this has to be on the client not server 
const serverTimezone = "America/New_York"; 

// Get the exact timestamp of the event date apply the server timezone to it. 
const serverEventTime = moment(34534534534, 'x').tz(serverTimezone); 

// Take the server time and convert it to the users time 
const userEventTime = serverEventTime.clone().tz(userTimezone); 

// From here you can format the time however you want 
const formattedUserEventTime = userEventTime.format('YYYY-MM-DD HH:mm:ss'); 
// Or format to a timestamp 
const userEventTimestamp = userEventTime.format('x'); 

あなたは上記と同じロジックに続く、同様に今の時間をお勧めします:

const serverTimeNow = moment().tz(serverTimezone); 
const userTimeNow = serverTimeNow.clone().tz(userTimezone); 

// Get timestamp so we can do easier math with the time 
const userNowTimestamp = userTimeNow.format('x'); 

今、私たちがしなければならないのは、今の時間イベント時間からの減算であります違いを得て、毎秒setInterval()を使って繰り返してください。

const millisecondsToEvent = userEventTimestamp - userNowtimestamp; 
const secondsToEvent = millisecondsToEvent/1000; 

うまくいけば、それは誰かにとって役に立ちます(ちょうどこれが2歳だったことに気付きました)。

関連する問題