Как вычесть 24 месяца из текущего значения даты и присвоить его другой переменной?

У меня есть два поля, которые отображаются с даты и до, у меня есть сценарий, в котором я буду динамически заполнять поле «Кому» oplossDaterangeto, а из поля oplossDaterangefrom будет установлено значение «24 месяца назад» из поля «Кому».

Как я могу установить дату на 24 месяца назад на основе даты?

main.html

<div class="row form-horizontal">
    <div class="col-md-6">
        <div class="form-group">
            <label for="Daterangefrom" class="col-md-4 control-label">From:</label>
            <div class="col-md-7" ng-if="rcsaCycleDTO.oplossValDate">
                <div class="row">
                    <div class="col-md-5 changeWdh">
                        <input type="text" class="form-control" name="oplossDaterangefrom" id="oplossDaterangefrom" kendo-date-picker ng-model="rcsaCycleDTO.oplossDaterangefrom" onkeydown="return false;" k-format="'MM/dd/yyyy'" k-min="'{{today}}'" ng-change="validateDate('oplossDaterangeto','oplossDaterangefrom')" />
                    </div>
                    <div class="col-md-1">
                        <label class="control-label padd15"> To:</label>
                    </div>
                    <div class="col-md-5 pull-right changeWdh">
                        <input type="text" class="form-control" name="oplossDaterangeto" id="oplossDaterangeto" kendo-date-picker ng-model="rcsaCycleDTO.oplossDaterangeto" disabled/>
                    </div>
                </div>
            </div>

Ctrl.js

$scope.oplossmaxdate = new Date('2015-01-15');
$scope.oplossmaxdate = $scope.oplossmaxdate.setMonth($scope.oplossmaxdate.getMonth() - 24);
$scope.oplossmaxdate = $filter('date')($scope.oplossmaxdate, 'MM/dd/yyyy');
console.log('date value :', $scope.oplossmaxdate);
$scope.oplossDaterangefrom = $scope.oplossmaxdate;

person aftab    schedule 14.01.2016    source источник
comment
В библиотеке MomentJS есть много полезных функций для работы с датами momentjs.com.   -  person Tanato    schedule 14.01.2016


Ответы (2)


Вы можете использовать get month, чтобы получить месяц, а затем вычесть из него 24. Если вы затем установите месяц, он вернется назад и изменит год и тому подобное.

Дайте d типа Дата:

d.setMonth(d.getMonth() - 24);

Задокументировано здесь

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth

Какие отмечает

Если указанный вами параметр выходит за пределы ожидаемого диапазона, setMonth() пытается соответствующим образом обновить информацию о дате в объекте Date. Например, если вы используете 15 для monthValue, год будет увеличен на 1, а 3 будет использоваться для месяца.

Таким образом, ваш код будет выглядеть примерно так:

oplossDaterangefrom = oplossDaterangeto;
oplossDaterangefrom.setMonth(oplossDaterangefrom.getMonth() - 24);
person Hogan    schedule 14.01.2016
comment
Спасибо за ответ помогло. - person aftab; 15.01.2016

Вы можете захотеть изучить что-то вроде moment.js, если это то, что вам придется делать много, это упрощает форматирование, добавление и вычитание дат. http://momentjs.com/

это будет выглядеть примерно так:

$scope.oplossmaxdate = moment("20150115", "YYYYMMDD").subtract(24, 'months');

person John Pizzo    schedule 14.01.2016