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/

10-11 19:36