2015-11-12 90 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由於顯而易見的原因,我沒有改變我的問題,但是我已經重構了處理這個問題的代碼,同時我實現了這個新函數,但是感謝你指出了這個問題! :) –