我有一个带有项目列表的JSON。 JSON有当前时间。每个菜单项都有开始时间和结束时间。我想显示的项目取决于时间。可能吗?我为此创造了一个小提琴。 FIDDLE
请参阅下面的JSON
{"time":"Thu Mar 23 4:10:44 -0700 2017","breakfast":{"start_time":"Thu Mar 23 1:00:00 -0700 2017","end_time":"Thu Mar 23 3:00:00 -0700 2017","soup":[{"id":"b_01","name":"BF_one"},{"id":"b_02","name":"BF_two"}]},"lunch":{"start_time":"Thu Mar 23 4:00:00 -0700 2017","end_time":"Thu Mar 23 6:00:00 -0700 2017","salad":[{"id":"l_01","name":"L_one"},{"id":"l_02","name":"L_two"}]},"dinner":{"start_time":"Thu Mar 23 7:00:00 -0700 2017","end_time":"Thu Mar 23 9:00:00 -0700 2017","meal":[{"id":"m_01","name":"M_one"},{"id":"m_02","name":"M_two"}]}}
请帮忙。
答案 0 :(得分:1)
您可以采取日期差异
例如,您在JSON中的当前时间是
Thu Mar 23 4:10:44 -0700 2017
将此设置为当前时间
var currenttime = new Date($scope.data["time"]);
现在,您可以遍历对象中的每个属性,并将开始时间和结束时间与当前时间进行比较
for (var key in $scope.data) {
if (key !== "time") {
var starttime = new Date($scope.data[key]["start_time"]);
var endtime = new Date($scope.data[key]["end_time"]);
var startdiff = (currenttime - starttime);
var enddiff = (currenttime - endtime);
if(startdiff < 0 && enddiff < 0){
$scope.text = ("Next activity \""+key+"\" in "+Math.abs(Math.round(((startdiff % 86400000) % 3600000) / 60000))+"min");
$scope.activity="Next";
break;
}
else if(startdiff > 0 && enddiff > 0)
{
//Activity has finished
}
else{
$scope.text = ("On going "+key);
$scope.activity = key;
break;
}
}
}
如果startdiff > 0 && enddiff > 0
条件为真 - >活动已经完成
如果startdiff < 0 && enddiff < 0
条件为真 - >您处于上一个和下一个活动之间
其他 - &gt;你有一个正在进行的活动
该行
Math.round(((startdiff % 86400000) % 3600000) / 60000)
会在minutes
因为它始终是Math.abs(...)
以下是 FULL EXAMPLE