-2

我正在使用以下方法来获取两个日期之间的日期差异。

var MS_PER_DAY = 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());
  返回 Math.floor((utc2 - utc1) / MS_PER_DAY);
}

如果我给出日期01-01-2013并且01-02-2013它返回28是错误的,那么预期的答案是31. 但是对于我测试过的所有其他情况,它给了我正确的答案。

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

DownVoters:请评论原因。

4

1 回答 1

0

Javascripts Date()s Month 基于 0。因此,您正在计算 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 天,因为您将 fromDate 设置为 2 月 1 日,将 toDate 设置为 3 月 1 日。

0 基于意味着当您创建一个新的日期时,您必须为月份编写:

1 月 0 日 2 月 1 日 3 月 2 日。. .

于 2013-10-31T09:35:38.590 回答