2016-05-22 18 views
-1

Ich versuche, zwei Termine zu summieren.zwei Daten in node.js summieren?

date1 und date2 sind Date() Objekte.

i gelesen Oher Fragen und gegoogelt es .. ich auf diese Weise hätte versucht, aber es gibt eine negative Zahl

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

var sum=new Date(sum_millis); 

console.log(sum.toString()); 

date1: 1901-02-01T00: 10: 00.000Z

date2: 1901- 01-31T23: 07: 23.000Z

Ergebnis: -4349551357000

, was mache ich falsch?

+0

https://jsfiddle.net/ x2yore52/funktioniert für mich .. was erwartest du? Gib uns ein Beispiel – Hearner

+0

Was meinst du mit _es funktioniert nicht_? Könntest du vielleicht ein bisschen mehr erklären, was du archivieren willst? Möchten Sie die vollständigen Zeitstempel oder nur z. Tages- oder Minutenbereiche? – Robin

+0

Wenn das Date-Objekt mit ungültigen Parametern erstellt wird, gibt seine Methode '.getTime'' NaN' zurück. "NaN" ist viral: Jede mathematische Operation, die unter Verwendung von "NaN" durchgeführt wird, ergibt "NaN". Eines oder beide Ihrer Date-Objekte sind wahrscheinlich fehlerhaft. Rufen Sie '.toString()' an Ihren Daten auf, wenn sie schlecht sind, erhalten Sie "Invalid Date" zurück. –

Antwort

-1

Sie sollten Null-Datum von jedem Datum subtrahieren, um mit der Zeit zu manipulieren.

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 

Sie können so etwas wie moment.js verwenden Dinge wie diese zu vereinfachen:

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

Oder umzusetzen:

// 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

Für Downvoter: Es ist nur Punkt auf OP Fehler, nicht Handlungsempfehlung. Ich sehe keinen Gewinn, um 'Date' dafür zu verwenden. –

+0

ja .... die Verwendung von Datumsobjekten war nicht der richtige Zug ... aber ich habe zwei Zeitzeichenfolgen in dieser Form "hh: mm: ss". Wie kann ich diese Zeitreihen addieren? – tino

0

Summieren von zwei Zeitstempeln könnte zu einem Wert führen, der sehr weit in der Zukunft überläuft (und aus dem ein neues Date() nicht mit einem gültigen Datum instanziiert werden kann, wenn das Ergebnis ein negativer Zeitstempel ist, wenn intern mit 32 Bit Ganzzahlen berechnet wird).

Das "neue Datum (Millis)" kann nicht für eine große Bandbreite von Daten (weit in der Vergangenheit oder in der Zukunft) garantiert werden, sondern funktioniert nur innerhalb eines begrenzten Bereichs von Zeitstempeln.

Die Frage ist also: Was sind die Werte von date1 und date2? - Wenn sie beide absolute Zeitstempel sind, ist ihre Summe ein vollständiger Unsinn. - Wenn der eine absolut und der andere eine relative Dauer ist, ist dies für eine kleine positive Dauer sinnvoll, und die Summe ist ein absoluter Zeitstempel. - Wenn beide relativ sind, ist das Ergebnis auch relativ. - negative relative Dauern können auch nicht mit getTime() funktionieren, und allgemeiner mit allen zyklischen Kalenderberechnungen, wenn sie intern einen "mod" -Operator oder einige ganzzahlige Divisionen anstelle von floor() verwenden): this könnte verbieten, gültige Werte für einige Felder wie Jahr, Woche, Monat oder sogar nur die Stunde (Modulo 24), Minute oder Sekunde (Modulo 60) zu berechnen: Sie erhalten Überläufe/Unterläufe oder Annäherungen in nicht getesteten/nicht unterstützten Datumsbereichen

Wie Sie gerade bearbeitet haben, sehe ich, dass Sie versuchen, zwei absolute Daten zu summieren. Bei der Verwendung von getTime() für absolute Daten sind die zurückgegebenen Werte bereits riesige Werte (aus einer Epoche weit in der Vergangenheit), und ihre Summe wird die Kapazität einiger 32-Bit-Implementierungen überlaufen.

Sie also den negativen Wert erhalten ...

Sehen Sie es selbst: die einzelnen Werte von date1.getTime log() und date2.getTime()

Wahrscheinlich, was Sie versuchen zu berechnen ist eine Differenz zweier absoluter Daten, keine Summe, um eine Dauer in Millisekunden zurückzugeben.

+0

ich erstelle date1 und date2 von zwei timestamp i retrive von der db .. so var date1 = new Date (1, 1,1, hmin, mmin, smin, 0); Ich weiß nicht, ob es der richtige Weg ist, zwei mal zu summieren. – tino

+0

Hier passiert kein Überlaufen. '.getTime()' gibt Millisekunden in Bezug auf den 1. Januar 1970 zurück. Beide Daten sind vor 1970, so dass sie negative Werte zurückgeben, und die Summe von zwei Negativen ist negativ. – JJJ

Verwandte Themen