2013-05-11 108 views
13

我試圖找出一種方法來獲得兩個日期之間的時間差秒。Nodejs中的時間差異?

例如,差在之間秒:

2013-5-11 8:37:18 

2013-5-11 10:37:18 

嘗試:

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

但是,這並不在的NodeJS與

的getTime()

工作,則錯誤

功能沒有被發現

+0

你傳遞給函數的是什麼?字符串或日期對象? – JJJ 2013-05-11 08:44:48

+0

Im傳遞字符串 – Alosyius 2013-05-11 08:45:48

+3

'npm install moment' - >'moment(laterdate).diff(earlierdate,'days')' – Prinzhorn 2013-05-11 08:49:41

回答

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) 

您將需要moment.js模塊

npm install -S moment 
+0

我認爲你需要添加 VAR secondsDiff =時刻(結束日期)爲.diff(的startDate,「秒」) – 2015-05-13 09:17:02

+1

'endDate.diff不是function' – jose920405 2016-11-24 15:19:29

+0

我認爲你需要安裝「瞬間」 – martinwang1985 2017-09-21 15:16:14

3

的timezonecomplete模塊有日期差異的支持,即使在不同的時區的日期。它返回一個時間對象,它是可感知單位的,而不只是表示「毫秒」一「號」:

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

獲取餘下的日子:

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

這似乎沒有更長時間纔是有效答案:'棄用警告:提供的值不是採用公認的RFC2822或ISO格式。時刻構造會回落到js Date(),這在所有瀏覽器和版本中都不可靠。非RFC2822 /ISO日期格式不鼓勵,將在即將到來的主要版本中刪除。請參閱http://momentjs.com/guides/#/warnings/js-date/瞭解更多信息。「我敢打賭,這是很長一段時間的一個很好的答案,但現在我們不敢遵循這條道路。沒有其他的東西嗎?我應該重新提出這個問題嗎? – 2017-11-13 16:23:07

+0

這似乎是一個更好的方式來做到這一點:也不會給出棄用警告。 'var minutesDiff = moment(recievedTimeStamp,'HH:mm a')。fromNow();' – 2017-11-13 16:43:55

0

我們可以利用這個優化的代碼也一樣,

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

這裏您需要安裝moment並且想在使用前導入。