2013-05-11 89 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并且想在使用前导入。