2016-08-29 11 views
0

AngularのUI Bootstrap Datepickerを変更して、週選択モードを許可します。これを有効にするには、activeDateを特定の週の最初の日曜日に設定する必要があります。したがって、日付を選択すると、8/29/2016のような月曜日と言えば、その選択を先週の日曜日の8日/ 28/16。Moment.JS与えられた日の前に日曜日を取得する

これは選択機能の外観です。アラートが一致するブロックelse ifの日曜日のロジックへの変換に興味がある場合。

$scope.select = function(date) { 
    if ($scope.datepickerMode === self.minMode) { 
     var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.timezone) : new Date(0, 0, 0, 0, 0, 0, 0); 
     dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); 
     dt = dateParser.toTimezone(dt, ngModelOptions.timezone); 
     ngModelCtrl.$setViewValue(dt); 
     ngModelCtrl.$render(); 
    } 

    else if($scope.datepickerMode =="week") 
     { 
     alert("Match!"); 
     self.activeDate = date.firstSundayofthatweek() //what do I actually put here using Moment.js? 
     setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]); 
     $scope.$emit('uib:datepicker.mode'); 
     } 

    else { 
     self.activeDate = date; 
     setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]); 
     $scope.$emit('uib:datepicker.mode'); 
    } 

    $scope.$broadcast('uib:datepicker.focus'); 
    }; 

私はmoment.jsを使用していますが、その方法をドキュメントで把握することはできません。バニラJSの答えも高く評価されます。関数に渡されるdateは、日付オブジェクトです。

モーメントのドキュメントが提案する次のいずれか

moment().day(-7);

または

moment().weekday(-7);

を私は...日付オブジェクトではなく、瞬間を渡していますので、私は変換したり、チェーンか何かか?申し訳ありません少し混乱しています...また、日付オブジェクトを返す必要がありますself.activeDate

答えて

3

最後の日曜日を特定の瞬間から取得するには、瞬時にday()と曜日名を使用してください。

var today = moment("29.08.2016", "DD.MM.YYYY"); 
var sunday = today.day("Sunday"); 
console.log(sunday.format("YYYY-MM-DD")); 

あなたがDateオブジェクトを持っている場合は、単に私の質問に編集を参照してください瞬間

moment(new Date()); 
+0

としてそれを解析し、私はあなたが概説されている部分を理解するが、私はどちらも通過も返却または瞬間ですこの場合、2つの日付オブジェクト間の仲介者としてmoment.jsをどのように利用すればよいですか? –

+0

なぜ中間体としてですか?日付を扱うたびに瞬間を利用してください。jsの 'Date' @SummerDeveloperよりずっと便利です。 – baao

関連する問題