var date1 = new Date("1/1/2010");
var date2 = new Date("12/31/2010");
var timeDiff1 = GetTimeDiff(date1, date2);
var date3 = new Date("1/1/2011");
var date4 = new Date("12/31/2011");
var timeDiff2 = GetTimeDiff(date3, date4);
var date5 = new Date("1/1/2010");
var date6 = new Date("12/31/2011");
var timeDiff3 = GetTimeDiff(date5, date6);
var diffDays1 = GetDiffDays(timeDiff1);
var diffDays2 = GetDiffDays(timeDiff2);
var diffDays3 = GetDiffDays(timeDiff3);
console.log('No. of days between ' + date1 + ' & ' + date2 + ' are ' + diffDays1);
console.log('No. of days between ' + date3 + ' & ' + date4 + ' are ' + diffDays2);
console.log('However,\nNo. of days between ' + date5 + ' & ' + date6 + ' are ' + diffDays3);
function GetDiffDays(timeDiff) {
return Math.ceil(timeDiff / (1000 * 3600 * 24));
}
function GetTimeDiff(date1, date2) {
return Math.abs(date2.getTime() - date1.getTime());
}

没有。在2010年1月1日至2010年1月1日之间2010年12月31日 364
没有。 2011年1月1日至2011年1月1日之间2011年12月31日 364
因此,理想情况是2010年1月1日至2010年1月1日之间的天数。 2011年12月31日 364 + 364 = 728
然而,
没有。在2010年1月1日至2010年1月1日之间2011年12月31日 729
我们如何在生产环境中解决这个问题?
答案 0 :(得分:2)
正如您可能已经注意到的那样,该代码通常只计算365天中的365天。那是因为新年前夕没有被计算在内。该代码计入"直到"但不是"包括"今年的最后一天。
从2010年的第一天到2010年的最后一天(但不包括),有364天。从2010年的第一天到2011年的第一天,有365个(请注意我在排除计算的最后一天时说的。)
您最有可能想从所解决的一年的第一天开始计算,直到明年的第一天,因此您可以计算所解决的一年中的每一天。请注意,正如您所说,您计算的时间是"在"之间日期。或者,你也可能想要包括最后一天(在行为之间更改)
检查下面的示例代码,看它是否符合您的需求:
var date1 = new Date("1/1/2010");
var date2 = new Date("12/31/2010 23:59");
var timeDiff1 = GetTimeDiff(date1, date2);
var date3 = new Date("1/1/2011");
var date4 = new Date("12/31/2011 23:59");
var timeDiff2 = GetTimeDiff(date3, date4);
var date5 = new Date("1/1/2010");
var date6 = new Date("12/31/2011 23:59");
var timeDiff3 = GetTimeDiff(date5, date6);
var diffDays1 = GetDiffDays(timeDiff1);
var diffDays2 = GetDiffDays(timeDiff2);
var diffDays3 = GetDiffDays(timeDiff3);
console.log('No. of days between ' + date1 + ' & ' + date2 + ' are ' + diffDays1);
console.log('No. of days between ' + date3 + ' & ' + date4 + ' are ' + diffDays2);
console.log('However,\nNo. of days between ' + date5 + ' & ' + date6 + ' are ' + diffDays3);
function GetDiffDays(timeDiff) {
return Math.ceil(timeDiff / (1000 * 3600 * 24));
}
function GetTimeDiff(date1, date2) {
return Math.abs(date2.getTime() - date1.getTime());
}

答案 1 :(得分:1)
那里没有错误, 您从2010年12月31日到2011年1月1日错过了计数,这是另一个