在this code中,
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年12月31日之间的天数为364
2011年1月1日至2011年12月31日之间的天数为364
因此,理想情况下,2010年1月1日至2011年12月31日之间的天数应为364 + 364 = 728
然而,
2010年1月1日至2011年12月31日之间的天数为729
我们如何在生产环境中解决此问题?
最佳答案
您可能已经注意到,该代码通常仅计算一年365天中的364天。那是因为不算跨年夜。该代码计数到一年的最后一天,最多不包括在内。
从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());
}
关于javascript - 如何确定年份变化时不匹配的天数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40487889/