2012-02-03 59 views
106

我從Date Picker控件獲取兩個輸入日期。我選擇了開始日期2/2/2012和結束日期2/7/2012。我爲此寫了下面的代碼。JavaScript:如何使用javascript計算兩個日期之間的天數

我應該得到的結果6但我正在逐漸5.

function SetDays(invoker) { 
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value(); 
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value(); 

    var oneDay=1000 * 60 * 60 * 24; 
    var difference_ms = Math.abs(end.getTime() - start.getTime()) 
    var diffValue = Math.round(difference_ms/oneDay); 
} 

誰能告訴我,我怎樣才能得到準確的區別?

+1

但是... 7減2是5 ... – Pointy 2012-02-03 14:12:44

+0

爲什麼你應該得到結果= 6? 07 - 02 = 05天.... – 2012-02-03 14:13:02

+0

但是從2到7天的範圍是2,3,4,5,6,7 = 6天。 – Supr 2012-02-03 14:16:31

回答

296

http://momentjs.com/https://date-fns.org/

從瞬間文檔:

var a = moment([2007, 0, 29]); 
var b = moment([2007, 0, 28]); 
a.diff(b, 'days') // =1 

,或者包括開始:

a.diff(b, 'days')+1 // =2 

節拍梅西手動添加時間戳和時區。

根據您的具體使用情況,您可以

  1. 使用a/b.startOf('day')和/或a/b.endOf('day')迫使差異是包容性或獨佔的「目的」(由@kotpal的意見建議) 。
  2. 設置第三個參數true以獲得浮點diff,然後根據需要您可以Math.floorMath.ceilMath.round
  3. 選項2也可以通過獲取'seconds'而不是'days'然後除以24*60*60來完成。
+0

感謝它爲我工作。 – 2012-02-03 14:33:37

+12

如果a 2016-04-15 15:16:47

+4

要注意忽略時間部分 - 否則你會得到不同的結果同一日期但不同時間(如從日期選擇器控制)。使用時刻(someDate).startOf('day')在執行diff(或任何其他對日期/時刻對象的時間部分敏感的操作)之前將時間部分顯式設置爲00:00:00 – kotpal 2017-08-02 05:07:31

8

嘗試:

//Difference in days 

var diff = Math.floor((start - end)/86400000); 
alert(diff); 
+0

我認爲這基本上是正確的,但它不是基本上與OP中的內容相同? – Pointy 2012-02-03 14:15:50

+0

由於他寫的方式,我沒有注意到,但是,非常非常! :P – Richard 2012-02-03 14:22:28

+0

這是更清潔,非常可讀。 – 2016-11-01 00:50:11

相關問題