我正在使用以下方法来获取两个日期之间的日期差异。
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-2013
和01-02-2013
,则返回28
这是错误的,
预期答案是31
。但对于我测试的所有其他情况,它给了我正确的答案。
我该怎么做才能正常工作?
DownVoters:请评论原因。
答案 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日 。 。