2016-09-30 10 views
0

私は日付の差異を計算するには管理して、理想的にJSによると:、計算差は、時間の分と秒の違いを取得 - それ以外moment.js

  1. 変換UNIX日はJS日に受け取った
  2. JS日付として現在の日付を保存
  3. MSの差はモーメントに変換され、時間分SEが返されるミリ
  4. に変換差分
  5. を取得するために、それらの形式と一緒moment.jsの両方に渡しますcs

私は、特定のバージョンのこれがうまくいく場合に問題に遭遇しました。うまくいけば、このシナリオを迂回して、単純なjsを使ってやりたいです。

フィドルをアップロードしました。あなたがcdnでmoment.jsのバージョンを見つけなかったので、瞬間の部分をコメントアウトしない限り、実行されません。

私は実例ではなく、ロジックと疑似コード/シンタックスの後にいます。 JSバージョンの問題は、両方のunix日付の計算された差異がミリ秒の日付* 1000に変換されると、1970年の日付になります。以下である

var now = new Date(Date.now()), 


ms = moment(then, "DD/MM/YYYY HH:mm:ss").diff(moment(now, "DD/MM/YYYY HH:mm:ss")), 
    d = moment.duration(ms), 
    formattedMomentDateDifference = Math.floor(d.asHours()) + ":"; 
    formattedMomentDateDifference += Math.floor(d.minutes()) + ":"; 
    formattedMomentDateDifference += Math.floor(d.seconds()); 
    $('#momentdifference').val(formattedMomentDateDifference); 

と:また、jsの中getMinutes()は

この

は一瞬JS例..ですない分の全体的な量、時間などのために同じに、そのタイムスタンプのリテラルの分を取得しますJS日は例:

var then = cleanedReceivedDate, //cleaned received date in unix 
difference = Math.floor(then - now)*1000, /* difference in milliseconds */ 
msDifferenceInDate = new Date(difference), 
hoursDiff = msDifferenceInDate.getHours(), 
minutesDiff = "0"+msDifferenceInDate.getHours(), 
secondsDiff = "0"+msDifferenceInDate.getSeconds(), 
    formattedTime = hoursDiff + ':' + minutesDiff.substr(-2) + ':' + secondsDiff.substr(-2); 
$('#jsdifference').val(formattedMomentDateDifference); 

JS fiddle

+1

私は 'duration.asSeconds()'を使って 'format(" h:mm:ss ")' – varontron

+0

@varontronに渡します。あなたのお時間をありがとう:) –

+0

'モーメント(moment.duration(ms).asSeconds())。format(" hh:mm:ss ")'これは簡単な方法です。 [jsfiddl](https://jsfiddle.net/wfs33ceg/) – varontron

答えて

2

マットはmoment.jsため、重複にリンクしているので、これは単なるPOJSソリューションです。

時間の値は、エポックからの秒数で、ECMAScriptの時間値は同じエポックからのミリ秒です。両方を同じ単位(秒またはミリ秒のいずれか)に変換し、その差を時間、分、秒に変換するだけです。

たとえば、2016-10-02T00:00:00ZのUNIX時刻の値は1475366400なので、ホストシステムのタイムゾーンで時、分、秒を取得するには、いくつかの簡単な数学を次いで、今:new Date(Date.now())Date.nowを使用

var then = 1475366400,  // Unix time value for 2016-10-02T00:00:00Z 
 
    now = Date.now(),  // Current time value in milliseconds 
 
    diff = now - then*1000, // Difference in milliseconds 
 
    sign = diff < 0? '-' : ''; 
 
diff *= sign == '-'? -1 : 1; 
 
var hrs = diff/3.6e6 | 0, 
 
    mins = diff%3.6e6/6e4 | 0, 
 
    secs = diff%6e4/1e3 ; 
 

 
// Helper to pad single digit numbers 
 
function z(n){return (n<10?'0':'') + n} 
 

 
console.log(sign + hrs + ':' + z(mins) + ':' + z(secs));

PS

が完全に冗長である、結果はIであります歯医者にnew Date()

+0

の最初のおかげで同じソリューションの後です! –

+0

あなたの答えを共有してくれてありがとう!この行に関して、 "diff * = sign == ' - ' -1:1;"私はそれが以下のように実行されるのを正しく認識しましたか?最初にチェック符号をつけて-1または1を割り当て、割り当てられた値にdiffを掛けてdiffに代入します。正しい?この行では、 "diff%6e4/1e3"が最初にモジュラスを計算し、その結果が次の値で除算されます。正しい? –

+0

@ JoeBorg-両方の質問にはい。最初は 'Math.abs(diff)'と同じですが、おそらくそれを書く方が良いでしょう。記号を別々に扱う必要がある場合は、-1:-23:-42のような結果が得られます。 – RobG

関連する問題