2013-10-31 32 views
-2

我使用下面的方法獲取兩個日期之間的日期差異。JavaScript中的日期差異計算問題

 
var MS_PER_DAY = 1000 * 60 * 60 * 24; 
function dateDiffInDays(dateFrom, dateTo) { 
    var utc1 = Date.UTC(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate()); 
    var utc2 = Date.UTC(dateTo.getFullYear(), dateTo.getMonth(), dateTo.getDate()); 
    return Math.floor((utc2 - utc1)/MS_PER_DAY); 
} 

如果我給作爲01-01-201301-02-2013它返回28這是錯誤的日期,預計 答案是31。但對於我測試過的所有其他情況,它給了我正確的答案。

我該怎麼做才能正確工作?

DownVoters:請評論原因。

+0

可能是您的本地設置或您實例化日期的方式(請注意,getMonth返回基於零的索引)您應該使用類似http://momentjs.com/的庫來處理日期操作。 – jbl

+0

@jbl那麼這是否意味着我無法正確使用這段代碼? – Maximin

+0

當然可以。我猜這個部分是有效的,但是你的輸入不是你認爲的那樣。注意你如何建立你的dateFrom和dateTo。他們不是你的想法。並做更多的測試。無論如何,使用圖書館將爲您節省大量時間。 – jbl

回答

0

Javascripts Date()s Month is 0 based。所以你正在計算2月1日到3月1日的差異。所以這裏的正確結果是28.

你想達到什麼我想是1月1日到2月1日的區別。

所以,你必須檢查其中的日期dateFrom和dateTo設置有每月更改爲月 - 1

下面是一個例子:

var fromDate = new Date(2013,1,1,0,0,0); 
var toDate = new Date(2013,2,1,0,0,0); 

var MS_PER_DAY = 1000 * 60 * 60 * 24; 
function dateDiffInDays(dateFrom, dateTo) { 
    var utc1 = Date.UTC(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate()); 
    var utc2 = Date.UTC(dateTo.getFullYear(), dateTo.getMonth(), dateTo.getDate()); 
    return Math.floor((utc2 - utc1)/MS_PER_DAY); 
} 

這將返回28天正確的,因爲你從日期設定到2月1日,到了3月1日。

一月0 2月1日 3月2日 :當你創建你寫了個月新日期

0化手段。 。 。

+0

對不起。我沒有得到解決問題的辦法。 – Maximin

+0

你可以發佈你的代碼,其中fromDate和toDate是初始化的嗎? – Igle

+0

它似乎通過使用已下載的js文件解析日期。它包含太多的行,所以發佈它不會很好。感謝您幫助我找到問題。 – Maximin