2012-02-03 80 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

相关问题