2013-05-11 13 views
13

Ich versuche, einen Weg zu finden, um die Zeitdifferenz in Sekunden zwischen zwei Daten zu erhalten.Zeitunterschied in Nodejs?

Zum Beispiel Differenz in Sekunden zwischen:

2013-5-11 8:37:18 

2013-5-11 10:37:18 

Versuchen:

function timeDifference(laterdate, earlierdate) { 
    var difference = laterdate.getTime() - earlierdate.getTime(); 
    var daysDifference = Math.floor(difference/1000/60/60/24); 
    difference -= daysDifference*1000*60*60*24 
    var hoursDifference = Math.floor(difference/1000/60/60); 
    difference -= hoursDifference*1000*60*60 
    var minutesDifference = Math.floor(difference/1000/60); 
    difference -= minutesDifference*1000*60 
    var secondsDifference = Math.floor(difference/1000); 

    return secondsDifference; 
} 

Aber das funktioniert nicht in NodeJS, Fehler mit

getTime()

Funktion nicht

+0

Was übertragen Sie an die Funktion? Strings oder Datumsobjekte? – JJJ

+0

Im übergeben es Strings – Alosyius

+3

'npm installieren Moment' -> 'Moment (später) .diff (früheres Datum, 'Tage')' – Prinzhorn

Antwort

25
var moment = require('moment') 
var startDate = moment('2013-5-11 8:73:18', 'YYYY-M-DD HH:mm:ss') 
var endDate = moment('2013-5-11 10:73:18', 'YYYY-M-DD HH:mm:ss') 
var secondsDiff = endDate.diff(startDate, 'seconds') 
console.log(secondsDiff) 

Sie das moment.js Modul

npm install -S moment 
+0

Ich glaube, Sie brauchen var secondsDiff = Moment (endDate) .diff hinzufügen (startdate, ‚s‘) –

+1

'endDate.diff ist kein function' – jose920405

+0

Ich glaube, Sie müssen installieren‚Moment‘ – martinwang1985

3

Das timezonecomplete Modul hat mit Daten in verschiedenen Zeitzonen, auch für Datendifferenzen Unterstützung müssen gefunden werden. Es gibt eine Dauer Objekt, das einheits bewusst ist, nicht nur eine „Nummer“, die „Millisekunden“ steht für:

var tc = require("timezonecomplete"); 

var start = new tc.DateTime("2014-06-26T12:00:00 Europe/Amsterdam"); 
var end = new tc.DateTime("2014-06-26T12:00:00 UTC"); 

var duration = end.diff(start); // unit-aware duration 

console.log(duration.minutes()); // -120 
console.log(duration.hours()); // -2 
1

Erhalten Sie die verbleibenden Tage:

var moment = require('moment'); 

var startDate = moment(new Date()).format("YYYY-MM-DD"); 

var endDate = moment(new Date("Tue Aug 27 2015 09:13:40 GMT+0530 (IST)")).format("YYYY-MM-DD"); 

var remainingDate = moment(endDate).diff(startDate, 'days'); 

console.log(remainingDate) // at time of posting, 106 days 
+0

Diese auf Nein erscheint Länger sei eine gültige Antwort: 'Verwarnung: Der angegebene Wert ist nicht in einem anerkannten RFC2822- oder ISO-Format. Moment Konstruktion fällt zurück auf js Date(), die nicht über alle Browser und Versionen zuverlässig ist. Nicht RFC2822 /ISO-Datumsformate werden abgeraten und werden in einer kommenden Hauptversion entfernt. Weitere Informationen finden Sie unter http://momentjs.com/guides/#/warnings/js-date/. Ich wette, es war lange Zeit eine gute Antwort, aber jetzt werden wir davon abgehalten, diesen Weg zu gehen. Gibt es noch etwas anderes? Soll ich diese Frage erneut stellen? –

+0

Dies scheint ein besserer Weg zu sein: Gibt auch keine Verwarnungswarnung. 'var minutesDiff = Moment (recievedTimeStamp, 'HH: mm a'). fromNow();' –

0

Auch wir diesen optimierten Code verwenden können,

function calculateDays(startDate,endDate) 
{ 
    var start_date = moment(startDate, 'YYYY-MM-DD HH:mm:ss'); 
    var end_date = moment(endDate, 'YYYY-MM-DD HH:mm:ss'); 
    var duration = moment.duration(end_date.diff(start_date)); 
    var days = duration.asDays();  
    return days; 
} 

Hier müssen Sie moment installieren und vor der Verwendung importieren möchten.

Verwandte Themen