2017-05-31 14 views
0

2つのタイムスタンプの期間(時間差)を計算するのに苦労しています。 私は、次の形式でサーバから受信タイムスタンプがあります:UTCでのmomentjsタイムスタンプ間の継続時間の計算

start # => "2017-05-31 06:30:10 UTC" は(これは基本的にDateTime.now.utcをルビーズれる)

私はそれまでのように、今から経過しているどのように多くの時間見てみたいです。 計算はanglejsフロントエンドでのみ行われます。 私は次のことを試してみました:

var start = moment("2017-05-31 06:30:10 UTC", "YYYY-MM-DD HH:mm:ss Z").utc(); 
var now = moment.utc(); 
var duration = moment.duration(now.diff(start)); 
console.log(duration.asHours()); #=> 2 hours even though the point in time was just a couple of minutes ago. 

残念ながら、これは常にローカルタイムを自分のデバイスを使用すると、実際のオフ時間は数時間だ時間を生成します。

だから私のアプローチは、すべての時間をUTCに変換して、これをすべて処理することでした。

私には何が欠けていますか?

答えて

1

入力がUTCなので、moment.utcメソッドを使用できます。

デフォルトでは、瞬間は解析され、現地時間で表示されます。

UTCで瞬間を解析または表示する場合は、moment()の代わりにmoment.utc()を使用できます。

ここ

ライブ例:あなたのコードサンプルで

var start = moment.utc("2017-05-31 06:30:10 UTC", "YYYY-MM-DD HH:mm:ss Z"); 
 
var now = moment.utc(); 
 
var duration = moment.duration(now.diff(start)); 
 
console.log(duration.asHours());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

、ローカル日付として入力された文字列を解析して、(utc()方法で)UTCに変換されます。

詳細はLocal vs UTC vs Offsetを参照してください。

+0

ありがとうございます! 引用したドキュメントは「オプションで、このように書くかもしれない」と理解しました。明らかに私はそこに間違っていた; p –

関連する問題