JavaScript中的日期差计算问题

JavaScript中的日期差计算问题,javascript,date,Javascript,Date,我使用下面的方法来获得两个日期之间的日期差 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.getMont

我使用下面的方法来获得两个日期之间的日期差

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); } var MS_/天=1000*60*60*24; 函数dateDiffInDays(dateFrom,dateTo){ var utc1=Date.UTC(dateFrom.getFullYear()、dateFrom.getMonth()、dateFrom.getDate()); var utc2=Date.UTC(dateTo.getFullYear()、dateTo.getMonth()、dateTo.getDate()); 返回数学楼层((utc2-utc1)/MS_/天); } 如果我将日期指定为
01-01-2013
01-02-2013
则返回的
28
是错误的, 预期答案是
31
。但对于我测试过的所有其他案例,它给了我正确的答案

我应该怎么做才能正确完成这项工作

投票人:请说明原因。

Javascripts Date()的月份以0为基础。所以你在计算2月1日和3月1日之间的差值。因此这里的正确结果是28

我想你想要达到的是1月1日和2月1日之间的差异

因此,您必须检查dateFrom和dateTo的设置位置,然后将月份更改为Month-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天,因为您将fromDate设置为2月1日,toDate设置为3月1日

基于0表示当您创建新日期时,您必须为月份写入:

1月0日 二月一日 三月二日 . .
.

可能与您的本地设置或实例化日期的方式有关(请注意,getMonth返回零基索引),您应该使用类似于库的方法来处理日期操作。@jbl这是否意味着我无法使这段代码正常工作?当然可以。我想这部分是可行的,但是你的输入并不是你想象的那样。注意如何构建dateFrom和dateTo。他们不是你想的那样。做更多的测试。无论如何,使用图书馆会节省你很多时间。对不起。我没有找到问题的解决方案。你能把你的代码贴在fromDate和toDate初始化的地方吗?它似乎用一个已经下载的js文件来解析日期。它包含了太多的行,所以张贴它将是不好的。谢谢你帮我找到这个问题。