JavaScript中的日期差异计算问题

时间:2013-10-31 09:16:03

标签: 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.getMonth(), dateTo.getDate());
  return Math.floor((utc2 - utc1) / MS_PER_DAY);
}

如果我将日期设为01-01-201301-02-2013,则返回28这是错误的, 预期答案是31。但对于我测试的所有其他情况,它给了我正确的答案。

我该怎么做才能正常工作?

DownVoters:请评论原因。

1 个答案:

答案 0 :(得分:0)

Javascripts Date()s月份为0。所以你计算2月1日到3月1日之间的差异。因此,正确的结果是28。

我想要实现的目标是1月1日到2月1日之间的区别。

因此,您必须检查日期dateFrom和dateTo的设置位置,并将月份更改为月份 - 。

以下是一个例子:

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基于表示您创建新日期时必须为月份编写:

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