首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AngularJS数据筛选器返回的值比所需的要多

使用AngularJS数据筛选器返回的值比所需的要多
EN

Stack Overflow用户
提问于 2017-04-26 09:34:05
回答 2查看 49关注 0票数 0

我通过angularJS的GET请求从Laravel导入数据。结果:

代码语言:javascript
复制
"vacations":[
    {
        "id":1,
        "timeschedule_id":1,
        "begindate":"2017-04-28 00:00:00",
        "enddate":"2017-04-30 00:00:00",
    },
    {
        "id":2,
        "timeschedule_id":1,
        "begindate":"2017-05-05 00:00:00",
        "enddate":"2017-05-06 00:00:00",
    }
]  

注意,这个假期JSON位于数据 JSON中

现在,我使用了以下筛选器来检查来自getDate()的日期是否介于我的控制器中的起始日期和结束日期之间:

代码语言:javascript
复制
$scope.vacation = data.data[0].vacations.filter(function (d) {
    if(moment(d.begindate).format("DD-MM-YYYY") <= $scope.getDate(4) 
       && $scope.getDate(4) <= moment(d.enddate).format("DD-MM-YYYY")) {
         return true;
    }
});

getDate()函数是一个简单的函数,仅此而已:

代码语言:javascript
复制
$scope.getDate = function($days_forward) {
     return moment().add($days_forward + $scope.i, 'days').format("DD-MM-YYYY");
};

此筛选器返回正确的结果,但也返回比要求更多的结果。例如,这一行也通过了,但是它不应该:

代码语言:javascript
复制
28-05-2017 // Result from getDate()

如何确保只从筛选器返回2017-04-28 00:00:00 -2017-04-30 00:00:002017-05-05 00:00:00 - 2017-05-06 00:00:00之间的日期?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-26 09:58:16

您可以简单地使用isBetween。您的代码可以如下所示:

代码语言:javascript
复制
$scope.vacation = data.data[0].vacations.filter(function (d) {
    if( $scope.getDate(4).isBetween(d.begindate, d.enddate) ) {
        return true;
    }
});

$scope.getDate = function($days_forward) {
    return moment().startOf('day').add($days_forward + $scope.i, 'days');
}

getDate函数现在返回一个矩对象,而不是字符串。

如果需要,您可以自定义包容性:

版本2.13.0引入了包容性。[表示包含一个值。(表示排除。如果使用包容性参数,则必须传递这两个指标。 如果未指定包含性参数,则矩默认为()

作为一般规则,如注释中所述,使用矩查询函数(如isSameisAfterisBefore等)来比较矩对象,而不是将它们格式化为字符串并通过<=进行比较。

票数 1
EN

Stack Overflow用户

发布于 2017-04-26 10:02:07

我将一个字符串与一个momentJS对象进行比较,因此我实现了以下步骤来解决这个问题:

将筛选器更改为:

代码语言:javascript
复制
if($scope.getMomentDate(4).isBetween(moment(d.begindate), moment(d.enddate), 
   'days', '[]')) {  // [] = all inclusive
    return true;
}

创建了一个辅助函数getMomentDate(),而不是getDate()

代码语言:javascript
复制
$scope.getMomentDate = function($days_forward){
    return moment().add($days_forward + $scope.i, 'days');
};

isBetween方法可用于比较两个MomentJS对象。使用该方法的可选的第四个参数,我能够在给定范围内包含每个MomentJS对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43630314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档