2016-05-13 22 views
0

設定された時刻と現在のサーバー時刻の時間差を計算する必要があります。moment.jsの2つのタイムゾーン形式の日付の差分

私はmomentjsと瞬時タイムゾーンライブラリを使用しています。ここで

は、私が持っているものです。

var serverTime = moment.tz(new Date(), "Europe/Berlin").format(); 
var bar = moment.tz("2016-05-14 00:00:00", "Europe/Berlin").format(); 
var baz = bar.diff(serverTime); 

console.log('server time is: ' + serverTime); 
console.log('time diff is: ' + baz); 

は、これは私にエラーを与える:

TypeError: bar.diff is not a function 

は、それが2つのタイムゾーン形式の日付の間のdiffをすることは可能ですか?そうでない場合は、momentjsライブラリを使用してそのような計算を実行する最適な方法は何ですか?

答えて

0

format文字列を生成するので、あなたが必要になるまでそれを使用しないでください文字列。

var now = moment.tz("Europe/Berlin"); 
var bar = moment.tz("2016-05-14 00:00:00", "Europe/Berlin"); 
var baz = bar.diff(now); 

console.log('current time is: ' + now.format()); 
console.log('time diff is: ' + baz); 

サーバーでこのコードを実行していない限り、「サーバー時間」ではありません。クライアント上で実行されている限り、クライアントの時計に基づいています。異なるタイムゾーンを使用していても、それは依然としてクライアントの時計に基づいています。

+0

ありがとうございます。私は変数の名前をより良くするべきだったと思う。私は指定されたタイムゾーンに変換された日付の間にdiffメソッドを使用していますので、目的の結果が得られます。しかし、私は、utcを使用するのがサーバーの時間をエミュレートするための良いアイデアだと思います。 – Grant

+0

時刻を比較しているだけの場合は、UTCをフードの下で使用しているため、特定のタイムゾーンを指定する必要はありません。後でそれを表示するので、最初の行にはTZだけが含まれています。差分だけを気にするなら、 'moment()'を使うことができます。 –

+0

WRTの「サーバー時刻」は、サーバーからタイムスタンプを取得することによって*真に*行う唯一の方法です。もちろん、タイムスタンプの送信に遅延があると考える必要があります。あなたは "サーバーのタイムゾーンを使用して" "サーバーの時計を使用して"を組み合わせているようです。クライアントは、自分が望むものに自分の時計を変更できることを覚えておいてください。それが同期しているという保証はありません。 –

0

moment.jsは本当に素晴らしいです!

私が単に行うことができそうです。

moment.duration(day14.diff(serverTime)).asHours(); 

または分と時間の数字を取得するために別途

moment.duration(day14.diff(serverTime)).minutes(); 
moment.duration(day14.diff(serverTime)).hours(); 
関連する問題