我正在尝试比较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')。我不明白这种行为,但怀疑我在这里缺少一些简单的东西。非常感谢任何帮助!
答案 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);
}
}
}
};