2017-04-12 22 views
1

質問を正しく表現する方法がわかりませんが、デバイスがオンになっている合計時間を計算しようとしています。私は、デバイスがオンまたはオフになっている時間を記録するmysqlデータベースを持っています。日付と時刻の合計時間を計算する

私のデータベースがどのように見えるかの例:私は(Get the time difference between two datetimesから参照)momentJS、このようなものを使用して2つの期間の間の差を計算する方法を知っている

device id    logtime   status 
--------------------------------------------------- 
17x1p14e6662 April 12th 2017, 1:05:52 pm ON 
17x1p14e6662 April 12th 2017, 1:06:34 pm OFF 
17x1p14e6662 April 12th 2017, 1:07:02 pm ON 
17x1p14e6662 April 12th 2017, 1:14:00 pm OFF 
17x1p14e6662 April 12th 2017, 1:34:52 pm ON 
17x1p14e6662 April 12th 2017, 3:25:20 pm OFF 
17x1p14e6662 April 12th 2017, 5:30:00 pm ON 

var now = "04/09/2013 15:00:00"; 
var then = "02/09/2013 14:20:30"; 

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss")); 
var d = moment.duration(ms); 
var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss"); 

デバイスのすべてのレコードを取得する場合、各「オン」と「オフ」の合計時間を計算するにはどうすればよいですか?

+0

'オン'時間も 'オフ'時間ですか? –

+0

はい、常に交互に表示され、「ON」の後に「OFF」が続きます。 – Bruno

+0

なぜなら、すべての 'ON'とすべての 'OFF'時間の配列を作るだけではいかがですか?その後、それらをループして差を計算してください... –

答えて

0

のステップのためにあなたのデータをチェック

  1. あなたは2の配列を必要としています。 1つは常に「オン」で、もう1つは「オフ」である。
  2. 'ON'にループします。
  3. 'OFF'配列のインデックスに値があるかどうかを確認します。
  4. はいの場合は、時間を計算して追加します。
  5. いいえの場合は、現在の時刻を取得し、計算して追加します。
  6. 仕上がり:D
+0

ありがとう、それは私がそれを把握するのに十分であるはずです。私はあなたの助けに感謝します。 – Bruno

+0

問題はありません。ご質問がある場合は質問してください:) –

0

@JanickFischerがあなたのコメントに書いたように、個々のサイクルを要約する必要があります。 ONOFF

ステップ2で割るアレイ:

ステップ1:あなたがあなたのデータを読み取る方法上の任意のコードを投稿していなかったので/あなたの配列にデータを格納し、私はこの一般的なワークフローを提供します比較します配列の長さ

  • 2A)に等しい場合:デバイスが現在オフであり、あなただけ(例えば(datetimeOff [0] - datetimeOn [0])オンオフサイクルの個々の和を計算することができる+(datetimeOff [1 ] - datetimeOn [1])+(...)、可読性のためだけの括弧)
  • 2b)count(ONs)= co現在の日時をオフ配列に追加し、同じ手順を使用することができます。2a
  • 2c)count(ONs)> count(OFFs)+ 1:データをチェックするもしギャップ
  • 2D)のカウント(オフ)>数(ONS)のために:ギャップ
+0

ありがとうccKep。あなたが提案したワークフローを使用します。 – Bruno

関連する問題