2016-09-19 8 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)の結果はとなります。

誰かにこれを行う方法がありますか?私はこの問題を解決するのに最適な方法を見つけた

:私は私を助けることができる任意の答え...おかげ溶液で

EDITを見つけられませんでした私は私の要件を解決moment.jsを見つけました。それを私のWebアプリケーションに組み込んだ後、私は質問と機能をmoment.jsから使用して問題を解決します。それは次のように機能します。

現在のタイムスタンプ(日、月、年、時、分)を取得します:

let currentTimestamp = moment(); //for example 19.09.2016 11:30 

タイムスパンと私の配列throught Iループよりをしてmoment.jsにしたstartDate/endDateにを解析私formatDD.MM.YYYY HH:mmを必要とし、その後、私は私のcurrentTimestampはこのように各項目のたstartDate/endDateに間にあるかどうかをチェックするためにmoment.jsqueryisBetween()を使用することができます。

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のいくつかのリンクが記載されています、どのようにそれをcorrectyを使用する - それは素晴らしいです!

moment.jsドキュメント:http://momentjs.com/docs/

moment.js解析:http://momentjs.com/docs/#/parsing/

moment.jsクエリ:http://momentjs.com/docs/#/query/

私は、これは便利ですね!答えからの代替解決策も正しいとマークされています。感謝と歓声。

答えて

関連する問題