2016-02-05 38 views
1

我想在我的角度控制器中比较两个日期字符串,但我得到不寻常的响应。我将今天的日期转换为字符串(“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( '2016年2月5日')至qtr4('12 /二千〇一十六分之三十一' )它评估的if语句为FALSE的含义,2/5/2016不低于2016年12月31日。但是,它将第二个状态评估为TRUE,意思是currentDate('2/5/2016')小于qtr3('9/30/2016')。我不明白这种行为,但怀疑这里有些简单的东西。任何援助非常感谢!

+2

你是比较字符串,并将其转换为日期,然后比较 –

+0

我试着转换为日期是这样的:var stringDate =年+“ - ” +月+“ - “+日; currentDate = new Date(stringDate); var qtr4 =年份+“-12-31”; qtr4 =新日期(qtr4); var qtr3 =年+“-9-30”; qtr3 = new Date(qtr3);但我得到无效日期错误currentDate和QTR3但不是QTR4。我得到了第四季的约会。我不明白。 –

回答

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()) 
+0

谢谢!这很好! –

0

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

当你比较2/5/2016到9/30/2016它比较好,因为它需要'2'和'9'作为第一个字母,然后'/'和'/',它工作正常。 一个解决方案在这里的是将字符串转换为Date对象,然后使用javascript对它们进行比较:

var v1 = new Date('2016-05-02') 
var v2 = new Date('2016-12-31') 
if (v1 > v2) (...) 
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); 
      } 
     } 
    } 
}; 
+0

感谢您试图提供帮助,但仍在评估if语句为False,意味着currentDate不小于qtr4或qtr3。 –

+0

我对getToday并不熟悉,但也许可以确保那是对今天的日期进行评估?你可以尝试在函数的开头设置一个变量:getDate = new Date()并将getToday替换为getDate? – erica

+0

getToday = new Date()。谢谢你的帮助! –