angularjs – 使用Moment.js的角度过滤日期(过去/未来)

前端之家收集整理的这篇文章主要介绍了angularjs – 使用Moment.js的角度过滤日期(过去/未来)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有像这样的对象的 JSON数据:

$scope.events = [
    {
        title: 'Event 1',date: '2015-04-11 10:00'
    },...
];

我用ng-repeat显示它:

<ul>
    <li ng-repeat="event in events">{{event.title}}</li>
</ul>

如何创建过滤器以仅显示未来事件并隐藏过去事件(将event.date与当前时间进行比较)?通常我会使用Moment’s .isBefore().

更新:

我想要配置日期属性名称.

解决方法

是.您应该使用Moment的isAfter方法定义自定义过滤器.
一个例子可以在 http://onehungrymind.com/build-custom-filter-angularjs-moment-js/找到

他们对过滤器的定义,他们甚至可以配置截止日期:

.filter('isAfter',function() {
  return function(items,dateAfter) {
    // Using ES6 filter method
    return items.filter(function(item){
      return moment(item.date).isAfter(dateAfter);
    })
  }
})

或者,如果您不想使其可配置:

.filter('isFuture',function() {
  return function(items) {
    return items.filter(function(item){
      return moment(item.date).isAfter(new Date());
    })
  }
})

申请:

ng-repeat="event in events | isAfter:date"

要么

ng-repeat="event in events | isFuture"

更新:

您想使日期属性名称可配置.你可以做到这一点.调用它的技巧是item.date与item [‘date’]相同.
第二个技巧是你可以使用||为参数提供默认值.参数|| ‘default’将使用param值(如果提供),如果未定义则使用’default’.

所以

.filter('isFuture',dateFieldName) {
    return items.filter(function(item){
      return moment(item[dateFieldName || 'date']).isAfter(new Date());
    })
  }
})

然后在ng-repeat中获得默认值:

ng-repeat="event in events | isFuture"

或指定字段名称

ng-repeat="event in events | isFuture:'deadline'"

猜你在找的Angularjs相关文章