Javascript中的日期比较就像字符串比较

时间:2015-11-12 20:00:38

标签: javascript angularjs

我正在使用Angular并在我的控制器中使用以下过滤器功能:

 $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-repeat期间过滤数据。会发生什么是日期比较就像一个字符串比较。我已经尝试将代码更改为:

 $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 个答案:

答案 0 :(得分:-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', '/')) {

它就像一个魅力:)