如何确定年度变化的天数不匹配

时间:2016-11-08 13:15:13

标签: javascript date

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年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

我们如何在生产环境中解决这个问题?

2 个答案:

答案 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日错过了计数,这是另一个