我通过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()的日期是否介于我的控制器中的起始日期和结束日期之间:
$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:00和2017-05-05 00:00:00 - 2017-05-06 00:00:00之间的日期?
发布于 2017-04-26 09:58:16
您可以简单地使用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引入了包容性。
[表示包含一个值。(表示排除。如果使用包容性参数,则必须传递这两个指标。 如果未指定包含性参数,则矩默认为()。
作为一般规则,如注释中所述,使用矩查询函数(如isSame、isAfter、isBefore等)来比较矩对象,而不是将它们格式化为字符串并通过<=进行比较。
发布于 2017-04-26 10:02:07
我将一个字符串与一个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对象。
https://stackoverflow.com/questions/43630314
复制相似问题