下拉选项更改取决于AngularJs中的时间

时间:2017-03-24 10:48:24

标签: angularjs

我有一个带有项目列表的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"}]}}

请帮忙。

1 个答案:

答案 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(...)

中的-ve值

以下是 FULL EXAMPLE