2016-09-19 31 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/

我希望這是有用的!來自也將起作用的答案的替代解決方案被標記爲正確的。感謝和歡呼。

相關問題