AngularJS使用momentjs的日期过滤器返回的值多于所需值

时间:2017-04-26 09:34:05

标签: angularjs momentjs

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

"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()的日期是否在我的控制器中的begindate和enddate之间:

$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()函数是一个简单的函数,仅此而已:

$scope.getDate = function($days_forward) {
     return moment().add($days_forward + $scope.i, 'days').format("DD-MM-YYYY");
};

此过滤器返回正确的结果,但结果也超出了要求。例如,这条线也正在通过,但它不应该:

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之间的日期?

2 个答案:

答案 0 :(得分:1)

您只需使用isBetween即可。您的代码可能如下所示:

$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 引入了包容性。 [表示包含值。 (表示排除。如果使用包含性参数,则必须通过两个指标。

     

如果未指定包含性参数,则Moment将默认为()

作为一般规则,如评论中所述,请使用isSameisAfterisBefore之类的时间query函数来比较时刻对象,而不是将它们格式化为字符串并通过<=

进行比较

答案 1 :(得分:1)

我正在将字符串与momentJS对象进行比较,因此我执行了以下步骤来解决此问题:

将过滤条件更改为:

if($scope.getMomentDate(4).isBetween(moment(d.begindate), moment(d.enddate), 
   'days', '[]')) {  // [] = all inclusive
    return true;
}

制作辅助函数getMomentDate()而不是getDate()

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

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