Javascript 简单数据比较器

Javascript 简单数据比较器,javascript,angularjs,Javascript,Angularjs,我试图用AngularJS实现一个简单的日期比较器。基本上,我将有一个带有dateStart和dateExpire字段的优惠券列表。我希望通过比较用户输入的searchStartDate和searchExpireDate与优惠券本身的dateStart和dateExpire来筛选此列表。我现在在控制器中拥有的是: $scope.startDateFilter = function (coupon) { var filteredList = []; var

我试图用AngularJS实现一个简单的日期比较器。基本上,我将有一个带有dateStart和dateExpire字段的优惠券列表。我希望通过比较用户输入的searchStartDate和searchExpireDate与优惠券本身的dateStart和dateExpire来筛选此列表。我现在在控制器中拥有的是:

    $scope.startDateFilter = function (coupon) {

        var filteredList = [];
        var searchStartDay = new Date().getDate();
        var searchStartMonth = new Date().getMonth();
        var searchStartYear = new Date().getYear();
        var startDate = new Date(coupon.dateStart).getDate();
        var startMonth = new Date(coupon.dateStart).getMonth();
        var startYear = new Date(coupon.dateStart).getYear();

        if (searchStartDay <= startDate && searchStartMonth <= startMonth && searchStartYear <= startYear)
            filteredList.push(coupon);

        if (searchStartMonth < startMonth && searchStartYear <= startYear)
            filteredList.push(coupon);

        if (searchStartYear < startYear)
            filteredList.push(coupon);

        return filteredList;
    }
此块是用于比较startDate和用户输入searchStartDate的自定义筛选器。然而,这对我不起作用

我的看法是:

 <tbody data-ng-repeat="coupon in activeList = (couponList | filter: {name: searchParent} | filter: startDateFilter) " data-ng-switch on="couponCollapse[$index]">

有人知道我为什么会在这里遇到问题吗?

您可以使用纯日期比较,因为您已经有了一个有效的日期对象。试试这个

$scope.startDateFilter = function (coupon) {

        var filteredList = [];
        var searchStartDate = new Date();
        var startDate = new Date(coupon.dateStart);

        if (searchStartDate < startDate)
            filteredList.push(coupon);

        return filteredList;
    }
这是一本书。只要使用,就可以使用标准比较,例如==,=>等

自定义筛选器:

app.filter('dateRangeFilter', function() {
  return function(coupons, from, to) {
    var result = [];

    for (var i = 0; i < coupons.length; i++) {
      if(coupons[i].startDate >= from && coupons[i].endDate <= to)
        result.push(coupons[i]);
    }

    return result;
  };
})
用法:

<body ng-controller="MainCtrl">
  Start Date:
  <input ng-model="sd" type="date" />
  <br/>End Date:
  <input ng-model="ed" type="date" />
  <br/>

  <ul>
    <li ng-repeat="coupon in coupons | dateRangeFilter:sd:ed">
      {{ coupon.startDate | date:'MM-dd-yyyy'}} to {{ coupon.endDate | date: 'MM-dd-yyyy' }}
    </li>
  </ul>
</body> 

我建议实现一个自定义过滤器,以更好地分离我同意的关注点。关注点的分离是angularjs如此吸引人的原因之一。看看我的答案。啊,我觉得自己很笨,不知道你可以直接比较两个约会对象。谢谢你的回答!哦,我明白了,标准比较是否也适用于datetime本地输入?