2017-03-24 27 views
1

我有一個包含項目列表的JSON。 JSON有當前時間。每個菜單項都有開始時間和結束時間。我想顯示的項目取決於時間。可能嗎?我爲此創造了一個小提琴。 FIDDLE下拉選項更改取決於AngularJs中的時間

請參閱下面的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

你可以把日期的差異

例如,在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條件爲真 - >你是一個和下一個活動之間

其他 - >你要去活動

Math.round(((startdiff % 86400000) % 3600000)/60000) 

會給你差minutes

由於這將永遠是一個-ve值圍繞着它在Math.abs(...)

這裏是FULL EXAMPLE

相關問題