2013-02-22 102 views
1

此代碼應給予0:40分,但是在一個方式給我0:20分,在其他的方式給了我1:40分鐘。爲什麼時差給了我2個不同的結果

var t1 = '12:05'.split(':'), 
    t2 = '12:45'.split(':'); 

var d1 = new Date(0,0,0,t1[0],t1[1]), 
    d2 = new Date(0,0,0,t2[0],t2[1]); 

document.write(d1+'<BR>'); 
document.write(d2+'<BR>'); 

var d = new Date(d1-d2); 
// should give 0:40 minutes 
document.write(d.getHours() + ":" + d.getMinutes() + '<BR>'); 
// 0:20 minutes 
var d = new Date(d2-d1); 
document.write(d.getHours() + ":" + d.getMinutes() + '<BR>'); 
// 1:40 minutes 

任何想法?

+1

因爲日期減法是不可交換? – 2013-02-22 18:17:10

回答

2

您可以編寫自己的函數來計算兩個日期的差異,並顯示結果在HH:MM格式。

因爲JavaScript,如果我們使用時間戳來獲取JS日期對象它創建全新的日期返回時間戳&兩個日期的差別。

下面是示例DateDiff函數:

function dateDiff(){ 
    var start = '12:05'.split(':'), // hardcoded value for sample 
    end = '12:45'.split(':');  // you can pass start and end value as parameter to dateDiff function. 

    var startDate = new Date(0, 0, 0, start[0], start[1], 0); 
    var endDate = new Date(0, 0, 0, end[0], end[1], 0); 
    var diff = endDate.getTime() - startDate.getTime(); 
    var hours = Math.floor(diff/1000/60/60); 
    diff -= hours * 1000 * 60 * 60; 
    var minutes = Math.floor(diff/1000/60); 

    return ((hours < 9 ? "0" : "") + hours + ":" + (minutes < 9 ? "0" : "") + minutes); 
} 
+0

感謝Prateek,它像一個魅力 – Sebastian 2013-02-24 18:33:07

+0

歡迎塞巴斯蒂安。 – Prateek 2013-02-25 09:28:41

2

減去兩個日期爲您提供了它們之間的毫秒數。將此傳遞給new Date會爲您提供一個新的日期對象,與紀元相距幾毫秒。

如果你想兩個日期之間的分鐘數,只是這樣做:

(d1-d2)/(60*1000); 
相關問題