2011-02-09 64 views
115

我在包含日期/時間的網格上有一個字段,我需要知道它與當前日期/時間之間的差異。什麼可能是這樣做的最好方法?如何在JavaScript中減去日期/時間?

+2

日期/時間的格式是什麼? – 2011-02-09 12:21:49

+0

它像那樣存儲「2011-02-07 15:13:06」 – 2011-02-09 12:23:26

回答

160

這會給你以毫秒爲單位兩個日期之間的區別,

var diff = Math.abs(date1 - date2); 

在您的例子,它會是

var diff = Math.abs(new Date() - compareDate); 

你需要確保compareDate是一個有效的Date對象。

像這樣的事情可能會爲你工作

var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/'))); 

即轉向"2011-02-07 15:13:06"new Date('2011/02/07 15:13:06'),這是Date構造能夠理解的格式。

21

您只能減去兩個日期對象。

var d1 = new Date(); //"now" 
var d2 = new Date("2011/02/01") // some date 
var diff = Math.abs(d1-d2); // difference in milliseconds 
6

您可以使用getTime()方法將Date轉換爲毫秒數自1月1日,1970年那麼你可以很容易做任何算術運算與日期。當然,您可以用setTime()將該號碼轉換回Date。見here的一個例子。

6

如果您希望在掛鐘時間,當地時區和日光節能意識方面有所不同。


Date.prototype.diffDays = function (date: Date): number { 

    var utcThis = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds()); 
    var utcOther = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()); 

    return (utcThis - utcOther)/86400000; 
}; 

測試


it('diffDays - Czech DST', function() { 
    // expect this to parse as local time 
    // with Czech calendar DST change happened 2012-03-25 02:00 
    var pre = new Date('2012/03/24 03:04:05'); 
    var post = new Date('2012/03/27 03:04:05'); 

    // regardless DST, you still wish to see 3 days 
    expect(pre.diffDays(post)).toEqual(-3); 
}); 

DIFF幾分鐘或幾秒鐘處於相同的方式。

10

除非您在相同的瀏覽器客戶端上減去日期,並且不關心日光節約時間更改等邊緣情況,否則最好使用提供強大的本地化API的moment.js。例如,這是我在我的utils.js中有的:

subtractDates: function(date1, date2) { 
    return moment.subtract(date1, date2).milliseconds(); 
}, 
millisecondsSince: function(dateSince) { 
    return moment().subtract(dateSince).milliseconds(); 
},