2016-09-19 178 views
0

你好我有如下代码:检查当前的日期/时间匹配定义的时间跨度

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.currentOption; 
 

 
    $scope.setCurrentTimespan = function() { 
 
    //CODE HERE 
 
    }; 
 
    
 
    $scope.timespanList = [{ 
 
    id: 1, 
 
    name: 'morning', 
 
    startDate: '19.09.2016 06:00', 
 
    endDate: '19.09.2016 11:59' 
 
    }, { 
 
    id: 2, 
 
    name: 'noon', 
 
    startDate: '19.09.2016 12:00', 
 
    endDate: '19.09.2016 13:29' 
 
    }, { 
 
    id: 3, 
 
    name: 'afternoon', 
 
    startDate: '19.09.2016 13:30', 
 
    endDate: '19.09.2016 18:29' 
 
    }, { 
 
    id: 4, 
 
    name: 'evening', 
 
    startDate: '19.09.2016 18:30', 
 
    endDate: '19.09.2016 23:59' 
 
    }, { 
 
    id: 5, 
 
    name: 'night', 
 
    startDate: '20.09.2016 00:00', 
 
    endDate: '20.09.2016 05:59' 
 
    }]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myController"> 
 
    <select ng-options="option as option.name for option in timespanList" ng-model="currentOption"></select> 
 
</div>

我从后台得到了与项的对象为我select。在这个列表中有一些像早上,中午,下午等时间片。这个时间片有一个startDate和一个endDate,它也来自后端。例如,“早上”的时间跨度有startDate/endDate:[今日] 06:00/[今日] 11:59。所以我想要做的是,当我加载列表并填写selectng-options时,我想从列表中选择与当前时间戳匹配的项目。因此,我必须获取当前日期和时间,例如:19.09.2016 09:45并且在列表中搜索为此时间戳定义的项目并在列表中选择它。所以我必须用当前的日期/时间来检查startDate/endDate。这应该发生在列表加载时。

所以我当地的时间(19.09.2016 09:45)在这一刻的结果将是早上

有人的想法如何做到这一点?我没有找到任何答案,可以帮助我...谢谢用解决

编辑:

我找到解决这个问题的一个完美的方式:我发现moment.js,解决了我的要求。将它加入我的网络应用程序后,我开始使用moment.js的查询和功能来解决我的问题。它的工作原理是这样的:

获取当前时间戳(日,月,年,时,分):

let currentTimestamp = moment(); //for example 19.09.2016 11:30 

比我循环throught我阵列的时间跨度,并与moment.js解析起始日期/结束日期我需要formatDD.MM.YYYY HH:mm,然后我可以使用moment.jsqueryisBetween()来检查,如果我的currentTimestamp是这样的每一个项目的起始日期/结束日期之间:

this.timespanList.forEach(function(item) { 
    let startDate = moment(item.startDate, 'DD.MM.YYYY HH:mm'); // for example 19.09.2016 06:00 
    let endDate= moment(item.endDate, 'DD.MM.YYYY HH:mm'); // for example 19.09.2016 11:59 

    if(moment(currentTimestamp).isBetween(startDate, endDate)) { 
     $scope.currentOption = item; 
    } 
}); 

因此,如果环状项目的条件为真,我可以在我的列表中设置正确的选项。这里有一些moment.js的链接描述,如何使用它正确 - 它是真棒!

moment.js文档:http://momentjs.com/docs/

moment.js解析:http://momentjs.com/docs/#/parsing/

moment.js查询:http://momentjs.com/docs/#/query/

我希望这是有用的!来自也将起作用的答案的替代解决方案被标记为正确的。感谢和欢呼。

回答

1

您可以实现自定义过滤器来实现此目的。

<select ng-options="option as option.name for option in timespanList | momentFilter" ng-model="currentOption"></select> 

.filter('momentFilter',function(){ 
      return function (object) { 
       var array = []; 
       angular.forEach(object, function (time) { 
         if(time.startDate.split(" ")[1] == '06:00' && time.endDate.split(" ")[1] == '11:59'){ 
          array.push(time); 
         } 
       }); 
       return array; 
      }; 
     }); 

我已经创建了一个工作的运动员here

做更多的工作来实现这一点。

+0

嗨,谢谢你的回答。我找到了一个很好的解决方案,请看我编辑的问题。也许有些东西你也可以使用! Thansk再次。 – MrBuggy

+0

PS:我会将您的解决方案标记为正确的,因为它可以作为moment.js情况下的工作替代解决方案。干杯。 – MrBuggy

+0

谢谢.. :) @MrBuggy –

0

用解决从问题中编辑:

我把我自己的解决方案,它是在我这里编辑的问题,所以大家可以更快地看到:

我发现解决这个完美的方式问题:我找到了moment.js,这解决了我的要求。将它包含到我的Web应用程序后,我开始使用moment.js中的查询和函数来解决我的问题。它的工作原理是这样的:

获取当前时间戳(日,月,年,时,分):

let currentTimestamp = moment(); //for example 19.09.2016 11:30 

比我循环throught我阵列的时间跨度和解析随刻起始日期/结束日期。 JS到我所需的格式DD.MM.YYYY HH:毫米,然后我可以使用moment.js查询isBetween()来检查,如果我的currentTimestamp是像这样的startDate /每个项目的结束日期之间:

this.timespanList.forEach(function(item) { 
    let startDate = moment(item.startDate, 'DD.MM.YYYY HH:mm'); // for example 19.09.2016 06:00 
    let endDate= moment(item.endDate, 'DD.MM.YYYY HH:mm'); // for example 19.09.2016 11:59 

    if(moment(currentTimestamp).isBetween(startDate, endDate)) { 
     $scope.currentOption = item; 
    } 
}); 

所以如果环状项目的条件为真,我可以在我的列表中设置正确的选项。这里有一些关于moment.js的链接,它们描述了如何正确使用它 - 这真棒!

moment.js文档:http://momentjs.com/docs/

moment.js解析:http://momentjs.com/docs/#/parsing/

moment.js查询:http://momentjs.com/docs/#/query/

我希望这是有用的!来自也将起作用的答案的替代解决方案被标记为正确的。感谢和欢呼。

相关问题