日期范围内使用 JavaScript 和 Moment.js无法正确评估



如果这看起来像是一个愚蠢的问题,我提前道歉,但我以前从未使用过Moment.js。

我有以下方法(从以前的开发人员继承的代码(,并且无法理解为什么评估不起作用。我相信这是微不足道的事情。

注意:只有if语句中>= weekOne的日期才能计算正确的日期。即使日期匹配,其他else if子句也不会计算。

var myObject = $scope.uptimeData;
var uptimeTotal = [];
if (myObject) {
var weekOne = moment().subtract(7, "days").format("YYYY-MM-DD");
var weekTwo = moment().subtract(14, "days").format("YYYY-MM-DD");
var weekThree = moment().subtract(21, "days").format("YYYY-MM-DD");
var weekFour = moment().subtract(28, "days").format("YYYY-MM-DD");
var weekFive = moment().subtract(35, "days").format("YYYY-MM-DD");
var weekSix = moment().subtract(42, "days").format("YYYY-MM-DD");
var weekSeven = moment().subtract(49, "days").format("YYYY-MM-DD");
var weekOneTotalSuccess = 0;
var weekTwoTotalSuccess = 0;
var weekThreeTotalSuccess = 0;
var weekFourTotalSuccess = 0;
var weekFiveTotalSuccess = 0;
var weekSixTotalSuccess = 0;
var weekOneTotalFail = 0;
var weekTwoTotalFail = 0;
var weekThreeTotalFail = 0;
var weekFourTotalFail = 0;
var weekFiveTotalFail = 0;
var weekSixTotalFail = 0;
Object.keys(myObject).map(function (key, index) {
if (myObject[key].successes) {
if (key >= weekOne) {
weekOneTotalSuccess = weekOneTotalSuccess + myObject[key].successes;
} else if (key >= weekTwo && key < weekThree) {
weekTwoTotalSuccess = weekTwoTotalSuccess + myObject[key].successes;
} else if (key >= weekThree && key < weekFour) {
weekThreeTotalSuccess = weekThreeTotalSuccess + myObject[key].successes;
} else if (key >= weekFour && key < weekFive) {
weekFourTotalSuccess = weekFourTotalSuccess + myObject[key].successes;
} else if (key >= weekFive && key < weekSix) {
weekFiveTotalSuccess = weekFiveTotalSuccess + myObject[key].successes;
} else if (key >= weekSix && key < weekSeven) {
weekSixTotalSuccess = weekSixTotalSuccess + myObject[key].successes;
}
else {
}
}
}
}

下面是一个数据示例:

"2017-05-03": {
"failures": 816, 
"successes": 18378
}, 
"2017-05-04": {
"failures": 1067, 
"successes": 22302
}, 
"2017-05-05": {
"failures": 1008, 
"successes": 82599
}, 
"2017-05-07": {
"failures": 2724, 
"successes": 142854
}, 
"2017-05-08": {
"failures": 1329, 
"successes": 149028
}

问题

您正在比较两个字符串。 例如,在第一次迭代时,您的值为:

key => "2017-05-03"
weekOne => moment().subtract(7, "days").format("YYYY-MM-DD"); /* which returns a formatted string */

><运算符实际上注定不会与字符串类型变量一起使用。

注意:在进行比较之前,这些运算符中的每一个都会在每个操作数上调用 valueOf(( 函数。

只要你使用的是 Moment.js,你就应该参考 MomentJS 查询文档部分,以比较一个日期是早于还是晚于另一个日期。

最新更新