比较角度控制器中的日期字符串的意外响应

时间:2016-02-05 19:06:23

标签: javascript angularjs

我正在尝试比较Angular Controller中的两个日期字符串,但我得到了不寻常的响应。我将今天的日期转换为字符串(“2/5/2016”),然后尝试将其与我输入的字符串日期进行比较。这是我的代码:

   function deleteTableRows(table) {
        var year = getToday.getFullYear();
        var month = getToday.getMonth() + 1;
        var day = getToday.getDate();
        var currentDate = month + "/" + day + "/" + year;
        var qtr4 = '12/31/' + year;
        var qtr3 = '9/30/' + year;
        for (var i = table.length - 1; i >= 0; i--) {
            if (currentDate < qtr4) {
                if (table[i].intYear == year && table[i].intQuarter == 4) {
                    table.splice(i, 1);
                }
            }
            if (currentDate < qtr3) {
                if (table[i].intYear == year && table[i].intQuarter == 3) {
                    table.splice(i, 1);
                }
            }
        }

};

我的问题是,当它将currentDate('2/5/2016')与qtr4('12 / 31/2016')进行比较时,它将if语句评估为FALSE,意味着,2/5/2016不小于12 /二千〇一十六分之三十一。但是,它将第二个if状态评估为TRUE,即currentDate('2/5/2016')小于qtr3('9/30/2016')。我不明白这种行为,但怀疑我在这里缺少一些简单的东西。非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您应该使用getTime()比较日期,例如yourDate.getTime(),并在使用之前将字符串转换为日期。

var currentDate = new Date(month + "/" + day + "/" + year);
var qtr4 = new Date('12/31/' + year);
var qtr3 = new Date('9/30/' + year);

并比较

if( currentDate.getTime() < qtr3.getTime() )

答案 1 :(得分:0)

您正在比较字符串,而不是日期。 日期中的斜线也被考虑在内。
字符串比较从左到右比较每个字符。 如果第一个字符相等,则比较下一个字符。当下一个字符较少时,则整个字符串较少。 这里的错误是&#39; /&#39;第二个符号大于&#39; 2&#39;字符,所以整个字符串会更大。

当您将2/5/2016与2016年9月30日进行比较时,它会比较好,因为它需要&#39; 2&#39;和&#39; 9&#39;作为第一个字母,那么&#39; /&#39;和&#39; /&#39;它工作正常。 这里的解决方案之一是将字符串转换为Date对象,然后使用javascript:

进行比较
var v1 = new Date('2016-05-02')
var v2 = new Date('2016-12-31')
if ( v1 > v2 ) (...)

答案 2 :(得分:0)

将字符串转换为日期,然后比较:

function deleteTableRows(table) {
    var getToday = new Date();
    var year = getToday.getFullYear();
    var month = getToday.getMonth() + 1;
    var day = getToday.getDate();
    var currentDate = month + "/" + day + "/" + year;
    var qtr4 = '12/31/' + year;
    var qtr3 = '9/30/' + year;
    for (var i = table.length - 1; i >= 0; i--) {
        if (new Date(currentDate) < new Date(qtr4)) {
            if (table[i].intYear == year && table[i].intQuarter == 4) {
                table.splice(i, 1);
            }
        }
        if (new Date(currentDate) < new Date(qtr3)) {
            if (table[i].intYear == year && table[i].intQuarter == 3) {
                table.splice(i, 1);
            }
        }
    }
};