if (emptyGrid) {
ranges.push({ start: new Date(IndividualBugetFigures.awardYears_Unformatted[elementIndex].Begin), end: new Date(IndividualBugetFigures.awardYears_Unformatted[elementIndex].End) })
}
else {
for (var i = 1; i < thisGridData.length; i++) {
//debugger;
if (i === 1 && new Date(thisGridData[i].childEffBegDate) > new Date(IndividualBugetFigures.awardYears_Unformatted[elementIndex].Begin)) {
ranges.push({ start: new Date(IndividualBugetFigures.awardYears_Unformatted[elementIndex].Begin), end: new Date(moment(thisGridData[i].childEffBegDate).subtract(1, 'days').calendar()) });
}
else {
if (i + 1 < thisGridData.length) {
//console.log('beginDate EndDate', new Date(thisGridData[i].childEffEndDate) + ' ' + new Date(thisGridData[i + 1].childEffBegDate));
console.log('in the and part', new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()) + ' ' + new Date(thisGridData[i + 1].childEffBegDate));
//debugger;
if (new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()) === new Date(thisGridData[i + 1].childEffBegDate)) {
if (i + 1 === thisGridData.length -1) {
return false;
}
}
else if (new Date(thisGridData[i].childEffEndDate) < new Date(thisGridData[i + 1].childEffBegDate) && new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()) !== new Date(thisGridData[i + 1].childEffBegDate))
ranges.push({ start: new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()), end: new Date(moment(thisGridData[i + 1].childEffBegDate).subtract(1, 'days').calendar()) });
}
if (i === thisGridData.length - 1 && new Date(thisGridData[i].childEffEndDate) < new Date(IndividualBugetFigures.awardYears_Unformatted[elementIndex].End))
ranges.push({ start: new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()), end: new Date(IndividualBugetFigures.awardYears_Unformatted[elementIndex].End) });
}
}
}
上面的代码通过if语句,除非它到达这个部分:
if (new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()) === new Date(thisGridData[i + 1].childEffBegDate)) {
if (i + 1 === thisGridData.length -1) {
return false;
}
}
当我安慰出去时:
console.log('in the and part', new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()) + ' ' + new Date(thisGridData[i + 1].childEffBegDate));
我明白了 -
in the and part Fri Jan 02 2015 00:00:00 GMT-0600 (Central Standard Time) Fri Jan 02 2015 00:00:00 GMT-0600 (Central Standard Time)
那么为什么if语句的评估结果为真呢?当我单步执行代码时,它会到达此行,然后步骤到下一个if。在此先感谢您的有益评论。
答案 0 :(得分:5)
即使严格比较日期对象,两个对象也永远不会相同。
比较纪元的毫秒数if (new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()).getTime() === new Date(thisGridData[i + 1].childEffBegDate).getTime()) {...
答案 1 :(得分:4)
您正在将日期实例与===
进行比较。两个单独的Date实例,即使它们引用完全相同的时间点,也绝不会比较为相同,因为它们是对象。
您可以使用一元+
操作数将Date实例强制转换为数字,并比较基础时间戳。
if (+new Date(moment(thisGridData[i].childEffEndDate).add(1, 'days').calendar()) === +new Date(thisGridData[i + 1].childEffBegDate)) {
此外,您应该能够以相同的方式使用Momentjs对象,并节省Date实例的构造。
答案 2 :(得分:0)
您需要了解比较对象和某些特定值之间存在差异。 :)
以下是我在Google上搜索“比较日期值javascript”时发现的第一个结果(它是不同日期比较的摘要,例如&lt;,&gt;,=,还有一个解释为什么它不适合你前):