2016-05-22 4 views
-1

私は2つの日付を合計しようとしています。はnode.jsの2つの日付を合計しますか?

date1とdate2はDate()オブジェクトです。

iはoher質問を読んで、それをググ..私がこのようにしようと試みたが、それは

var sum_millis = date1.getTime()+date2.getTime(); 

var sum=new Date(sum_millis); 

console.log(sum.toString()); 

日付1負の数を返す:1901-02-01T00:10:00.000Z

日付2:1901- 01-31T23:07:23.000Z

結果:私が間違って-4349551357000

をやっていますか?

+0

https://jsfiddle.net/ x2yore52 /私のために働く..あなたは何を期待していますか?私たちに例を与えてください – Hearner

+0

あなたは_itによって何を意味するのですか?あなたがアーカイブしようとしていることをもう少し説明できますか?完全なタイムスタンプを合計するか、たとえば日または分の範囲? – Robin

+0

Dateオブジェクトが無効なパラメータで構築されている場合、 '.getTime'メソッドは' NaN'を返します。 「NaN」はウイルス性であり、「NaN」を使用して実行される任意の数学演算は「NaN」を生じる。 Dateオブジェクトの一方または両方が不正な形式になっている可能性があります。あなたの日付で '.toString()'を呼び出します。悪い場合は "無効な日付"を返します。ありがとう。 –

答えて

-1

時刻を操作するには、各日付からゼロ日付を引く必要があります。

var sum = moment() 
    .hour('12').minute('44') 
    .add(4,'hours').add(20, 'minutes') 
    .format("HH:mm"); 

するか、それを実装します:

var t0 = Date(0,0,0)).getTime(); 
var t1 = (new Date(0, 0, 0, 0, 0, 15)).getTime() - t0; // 15000 ms 
var t2 = (new Date(0, 0, 0, 0, 0, 30)).getTime() - t0; // 30000 ms 
var sum = t1 + t2; // 45000ms 

あなたはこのようなものを簡素化するためにmoment.jsようなものを使用することができます

// Convert a time in hh:mm format to minutes 
function timeToMins(time) { 
    var b = time.split(':'); 
    return b[0]*60 + +b[1]; 
} 

// Convert minutes to a time in format hh:mm 
// Returned value is in range 00 to 24 hrs 
function timeFromMins(mins) { 
    function z(n){return (n<10? '0':'') + n;} 
    var h = (mins/60 |0) % 24; 
    var m = mins % 60; 
    return z(h) + ':' + z(m); 
} 

// Add two times in hh:mm format 
function addTimes(t0, t1) { 
    return timeFromMins(timeToMins(t0) + timeToMins(t1)); 
} 

console.log(addTimes('12:13', '01:42')); // 13:55 
console.log(addTimes('12:13', '13:42')); // 01:55 
console.log(addTimes('02:43', '03:42')); // 06:25 
+0

downvoterの場合:これはOPのエラーを示しているだけで、アクションのアドバイスではありません。私はこのために 'Date'を使う利益はないと思っています。 –

+0

はい....日付オブジェクトを使うのは正しい動きではありませんでしたが、私はこの形式で2つの時間文字列 "hh:mm:ss"を持っています。それらのタイムストリングをどのように合計することができますか? – tino

0

2つのタイムスタンプを合計すると、内部で一部の32ビット整数で計算された結果が負のタイムスタンプである場合、オーバーフローする新しい日付()が有効な日付にインスタンス化できない)。

"新しい日付(ミリ秒)"は非常に広い範囲の日付(過去または将来)には適用されませんが、限られたタイムスタンプの範囲内でのみ動作します。

質問は次のとおりです。date1とdate2の値は何ですか? - 両方が絶対タイムスタンプである場合、その合計は完全ではありません。 - 一方がaboluteで他方が相対的な持続時間である場合、これは小さな正の期間には意味があり、その合計は絶対的なタイムスタンプです。 - 両方が相対である場合、結果も相対的です。 - 内部的にいくつかの "mod"演算子または整数部(floor()を使用する代わりにゼロに切り捨てられた)を使用した場合、負の相対的持続時間はgetTime()では機能しません。 (モジュロ24)、分または秒(モジュロ60):オーバーフロー/アンダーフロー、またはテストされていない/サポートされていない日付範囲の近似を取得する

これまでに編集したように、2つの絶対日付を合計しようとしています。 絶対日付でgetTime()を使用すると、返された値は既に大きな値(過去のエポックから)であり、その合計が一部の32ビット実装の上限をオーバーフローします。

ですから、

は自分でそれを参照してください...負の値を取得します:date1.getTime()とdate2.getTime(の個々の値をログ)

おそらく何をしようとしていることは計算することです絶対値ではなく2つの絶対日付の差で、ミリ秒単位の期間を返します。

+0

私は2つのタイムスタンプからdate1とdate2を作成します。私はデータベースからretrive ..このようにvar date1 = new Date(1、 1,1、hmin、mmin、smin、0);私はそれが2回合計する正しい方法であるかどうかわかりません – tino

+0

ここで溢れていることはありません。 '.getTime()'は1970年1月1日からのミリ秒を返します。どちらの日付も1970年以前であるため、負の値を返し、2つのネガティブの合計は負です。 – JJJ

関連する問題