2015-11-12 64 views
-1

我使用的角度,并具有以下过滤功能在我的控制器:日期比较就像一个字符串比较

$scope.filterDocuments = function (row) { 
      var dateCompare = $filter('date')(row.FilingDate, 'MM/dd/yyyy'); 

      if (dateCompare >= $scope.dateLimit) { 
       if ($scope.query === '' || $scope.query === undefined) { 
        return true; 
       } else if (angular.lowercase(row.Description).indexOf($scope.query) !== -1) { 
        return true; 
       } else { 
        return false; 
       } 
      } else { 
       return false; 
      } 
     }; 

此功能使用了NG-重复过程中对数据进行筛选。日期比较的结果就像一个字符串比较。我试图将代码更改为:

$scope.filterDocuments = function (row) { 
      var dateCompare = $filter('date')(row.FilingDate, 'MM/dd/yyyy'); 

      if (dateCompare.getTime() >= $scope.dateLimit.getTime()) { 
       if ($scope.query === '' || $scope.query === undefined) { 
        return true; 
       } else if (angular.lowercase(row.Description).indexOf($scope.query) !== -1) { 
        return true; 
       } else { 
        return false; 
       } 
      } else { 
       return false; 
      } 
     }; 

而且这种情况更糟!

如何解决这个问题,使日期比较工作,我可以根据日期过滤?

+1

这条线路目前还不清楚'VAR dateCompare = $过滤器( '日期')(row.FilingDate,“MM/DD/yyyy');''dateCompare'的类型是什么。你调试过代码并检查'dateCompare'和'$ scope.dateLimit'的值/类型吗? –

+0

'$ filter('date')'返回格式化字符串 – Grundy

+1

如果它返回一个字符串,为什么OP会抱怨字符串比较?它正在做他们要求它做的事情? OP,你没有很好地解释问题是什么,你正在使用什么输入,究竟是如何失败? –

回答

-1

我在另一个线程上找到了答案(现在找不到它)。我使用下面的函数:

function stringToDate(_date, _format, _delimiter) { 
    var formatLowerCase = _format.toLowerCase(); 
    var formatItems = formatLowerCase.split(_delimiter); 
    var dateItems = _date.split(_delimiter); 
    var monthIndex = formatItems.indexOf("mm"); 
    var dayIndex = formatItems.indexOf("dd"); 
    var yearIndex = formatItems.indexOf("yyyy"); 
    var month = parseInt(dateItems[monthIndex]); 
    month -= 1; 
    var formatedDate = new Date(dateItems[yearIndex], month, dateItems[dayIndex]); 
    return formatedDate; 
} 

这需要一个日期字符串,并返回一个格式化的日期。然后我用做对比:

if (stringToDate(dateCompare, 'mm/did/yyyy', '/') >= stringToDate($scope.dateLimit, 'mm/did/yyyy', '/')) { 

它的工作原理就像一个魅力:)

+0

请注意,您现在正在使用'filter(“date”)'将其更改为一个字符串,然后将该字符串解析为日期以供比较。不是特别有效。 –

+0

你的代码不工作:你期待3个参数,但只传递一个,所以当你尝试执行:var formatLowerCase = _format.toLowerCase();'你得到异常 – Grundy

+0

我修复了代码以反映正确的语法。我的错。 @MikeMcCaughan由于显而易见的原因,我没有改变我的问题,但是我已经重构了处理这个问题的代码,同时我实现了这个新函数,但是感谢你指出了这个问题! :) –