您好,我有以下代码:
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>
&#13;
我从后端获得了一个包含select
项目的对象。在这个列表中有一些时间跨度,如早晨,中午,下午等。这个时间跨度有一个startDate和一个endDate,它也来自后端。例如,时间早晨&#34;按照startDate / endDate:[今天的日期] 06:00 / [今天的日期] 11:59。所以我想要做的是,当我加载列表并用select
填充ng-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
比我使用timespans循环遍历我的数组并使用moment.js
将startDate / endDate解析为我所需的format
DD.MM.YYYY HH:mm
然后我可以使用moment.js
{ {1}} query
检查,如果我的currentTimestamp在每个项目的startDate / endDate之间,如下所示:
isBetween()
因此,如果循环项的条件为真,我可以在列表中设置正确的选项。以下是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 docs:http://momentjs.com/docs/
moment.js解析:http://momentjs.com/docs/#/parsing/
moment.js查询:http://momentjs.com/docs/#/query/
我希望这很有用!来自答案的替代解决方案也可以正常工作。谢谢和欢呼。
答案 0 :(得分: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;
};
});
我创建了一个工作的plunker here。
要做更多努力才能实现这一目标。
答案 1 :(得分:0)
使用问题解决方案进行编辑:
我把自己的解决方案放在我编辑的问题中,这样每个人都可以更快地看到它:
我找到了解决这个问题的完美方法:我找到了moment.js,它解决了我的要求。将它包含到我的网络应用程序后,我开始使用moment.js中的查询和函数来解决我的问题。它的工作原理如下:
获取当前时间戳(日,月,年,小时和分钟):
let currentTimestamp = moment(); //for example 19.09.2016 11:30
比我使用timespans循环遍历我的数组并使用moment.js将startDate / endDate解析为我所需的格式DD.MM.YYYY HH:mm然后我可以使用moment.js查询isBetween()来检查,如果我的currentTimestamp在每个项目的startDate / endDate之间,如下所示:
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 docs:http://momentjs.com/docs/
moment.js解析:http://momentjs.com/docs/#/parsing/
moment.js查询:http://momentjs.com/docs/#/query/
我希望这很有用!来自答案的替代解决方案也可以正常工作。谢谢和欢呼。