用Javascript比较日期不起作用

时间:2019-08-09 16:49:56

标签: javascript date momentjs date-comparison

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!");

        }

2 个答案:

答案 0 :(得分:0)

您不比较整数或数字format返回一个字符串。

为什么不使用moment.js库中的isAfter内置方法来比较两个“时刻”。

    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!");

    }

答案 1 :(得分:0)

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

这是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/