2013-05-11 35 views
13

Próbuję znaleźć sposób, aby uzyskać różnicę czasu w sekundach między dwiema datami.Różnica czasu w Nodejs?

Na przykład, różnica sekund pomiędzy:

2013-5-11 8:37:18 

2013-5-11 10:37:18 

Tried:

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; 
} 

Ale to nie działa w Nodejs, błąd z

getTime()

funkcja nie jest znaleźć

+0

Co przechodzisz do funkcji? Ciągi lub obiekty daty? – JJJ

+0

Przekazuję ciągi znaków – Alosyius

+3

'npm install moment' ->' moment (późniejsza data) .diff (wcześniejsza data, 'dni') ' – Prinzhorn

Odpowiedz

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) 

Musisz moduł

npm install -S moment 
+0

Myślę, że musisz dodać var secondsDiff = moment (endDate) .diff (startDate, 'seconds') –

+1

'endDate.diff nie jest funkcją" – jose920405

+0

Myślę, że musisz zainstalować "moment" – martinwang1985

3

Moduł timezonecomplete posiada wsparcie dla różnic data moment.js, nawet z dat w różnych strefach czasowych. Zwraca obiekt czasie trwania, jednostka świadoma, a nie tylko „numer”, który oznacza „ms”:

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

uzyskać pozostałe dni:

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

To wydaje się nie być poprawną odpowiedzią: 'Ostrzeżenie o przestoju: podana wartość nie znajduje się w uznanym formacie RFC2822 lub ISO. moment konstrukcja wraca do js Date(), która nie jest niezawodna we wszystkich przeglądarkach i wersjach. Non RFC2822 /Formaty daty ISO są odradzane i zostaną usunięte w nadchodzącym wydaniu głównym. Więcej informacji znajduje się na stronie http://momentjs.com/guides/#/warnings/js-date/. Założę się, że była to dobra odpowiedź od dłuższego czasu, ale teraz zniechęcamy do podążania tą ścieżką. Czy nie ma czegoś innego? Czy powinienem ponownie zadać to pytanie? –

+0

Wydaje się, że jest to lepszy sposób: Nie daje również ostrzeżenia o wycofaniu. 'var minutesDiff = moment (recievedTimeStamp, 'HH: mm a'). fromNow();' –

0

Możemy wykorzystać ten kod zoptymalizowany też

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; 
} 

Tutaj należy zainstalować moment i zaimportować przed użyciem.