2017-09-21 4 views
0

私はMomentJSを使用して自分の音楽のプログレスバーを作成しようとしています。 MomentJSの計算とフォーマット

は、私のような最後の更新時間があります: "2017-09-21T18:20:11.2734588 + 02:00"

私の残りの秒のように持っている:120

私は120秒を追加しよう前回の更新時刻と最後の更新時刻との差を計算します。

私が試した:

var start = moment(stateobject.LastUpdate); 
var now = moment(); 
var end = moment(start).add(stateobject.Value.data.remaining,'seconds'); 

をしかし、終了時刻が開始時刻と全く同じです。今は120秒を追加するだけです。

私はおそらくフォーマットとは関係がありますが、私は見つけられませんでした。

多分誰かが私を助けることができますか?ここでは上記のコードの結果

enter image description here

+0

'start'はすでに瞬間です。それを再初期化する必要はありません: 'moment(start)' – chazsolo

+0

'.add()'は元の瞬間を変更します。多分それが原因です。もっとコードを表示できますか?どのように初期化しますか?どのようにそれらを比較するのですか? – dashmug

+0

@chazsoloチップについて – Furya

答えて

0

あなたは瞬間の値を表示するformat()(または.toString()または.toISOString())を使用する必要が

編集ありがとうございましたオブジェクト。一般的な使用として

、(_接頭辞)Internal propertiesを使用していない

最も一般的にみ内部プロパティには、JavaScriptのDateその瞬間ラッパーを保持している_dプロパティです。多くの場合、開発者はコンソール出力の値が_dであると混乱します。モーメントは、エポックシフトというテクニックを使用します。このテクニックは、モーメントが反映する実際の日付の値と異なる場合があります。特にMoment TimeZoneが使用されている場合、このプロパティは、モーメントがpublic .format()関数から出力する実際の値とほぼ同じになることはほとんどありません。そのため、_dの値と_という接頭辞が付いたプロパティは、一切使用しないでください。

モーメントの値をプリントアウトするには、.format(),.toString()または.toISOString()を使用してください。

あなたのコードは結構です、あなただけの瞬間をログに記録されている間違った方法オブジェクト:

var stateobject = { 
 
    LastUpdate: '2017-09-21T18:20:11.2734588+02:00', 
 
    Value: { data: { 
 
    remaining: 120 
 
    }} 
 
}; 
 

 
var start = moment(stateobject.LastUpdate); 
 
var now = moment(); 
 
var end = moment(start).add(stateobject.Value.data.remaining,'seconds'); 
 

 
console.log(start.format('HH:mm:ss')); 
 
console.log(end.format('HH:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

関連する問題