将日期与 Javascript 进行比较不起作用

Comparing Dates with Javascript does not work

Moment.js 快把我逼疯了。

我有这种格式的日期 2019 年 7 月 10 日在我的对象数组 alldata 中,这是我的代码: 我需要过滤掉 DueDate 在过去 90 天范围之外的对象。

问题是比较工作不正常...它告诉我 11-05-2019 > 08-08-2019

我是不是遗漏了什么或者 moment.js 中有错误?随意建议任何不使用 moment.js

的方法
 var todate = moment().format("DD-MM-YYYY"); 
        var fromdate = moment().subtract(90, "days").format("DD-MM-YYYY");     
        var data = [];



        for (i = 0; i < alldata.length; i++) {
            duedate = moment(alldata[i].DueDate, "DD-MMM-YYYY").format('DD-MM-YYYY');
            if ( duedate >= fromdate) {
                alert("good!");
            } else
                alert("bad!");

        }

您不是在比较整数或数字 format returns 字符串。

为什么不使用 moment.js 库中的 isAfter 内置方法来比较两个 "moments"。

    var fromdate = new moment().subtract(90, "days");   
    for (i = 0; i < alldata.length; i++) {
        let checkDate = new moment(alldata[i].DueDate,"DD-MMM-YYYY")
        let isAfter = checkDate.isAfter(fromdate);
        if ( isAfter ) {
            alert("good!");
        } else
            alert("bad!");

    }

您正在比较字符串,因为您在比较之前格式化日期。

这是一个moment.js独立的例子:

//Include https://momentjs.com/downloads/moment.js
var oldDate = new moment('11-Jan-2018', 'DD-MMM-YYYY');
var newDate = new moment('01-Feb-2018', 'DD-MMM-YYYY');
if (newDate.isAfter(oldDate)) {
    alert('it works');
}
else {
    alert('no workie');
}

https://jsfiddle.net/h3yf5r60/4/

使用此代码段作为纯 JS 的示例:

var now = new Date();
var yesterday = new Date();
yesterday.setMonth(yesterday.getMonth() - 1);
if (now > yesterday) {
    alert('it works');
}
else {
    alert('no workie');
}

https://jsfiddle.net/Lobpk519/