Установить динамический максимальный лимит на jQuery datepicker в AngularJS - PullRequest
0 голосов
/ 16 октября 2018

В моем приложении максимальная дата рассчитывается на основе некоторой логики.Дата является датой JSON.Он будет использоваться для установки максимальной даты.

Чтобы показать проблему, я создал плункерную ссылку (http://plnkr.co/edit/KR2brhOXPMgZhbhafhex?p=preview).

В моем примере max-date атрибут получает дату JSON

<input type="text" date-picker="" date-range="true" ng-model="Date" 
class="form-control input-sm" placeholder="MM/DD/YYYY" 
ng-required="true" name="Date" ng-pattern='datePattern'
max-date="dateLimit"/>

В моем контроллере Iпопробуйте преобразовать дату JSON в строку даты мм / дд / гг. Для этого я создаю функцию getcalculateddDate, которая принимает

Оценил мою дату в консоли инструментов Chrome Dev

enter image description here

app.controller('MainCtrl', function($scope) {
    $scope.datePattern = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/i
    var jsonDateExample = "/Date(1522728000000)/";
    $scope.dateLimit = getCalculatedDate(jsonDateExample );

    function getCalculatedDate(date) {
        var year = date.getFullYear();
        var month = (1 + date.getMonth()).toString();
        month = month.length > 1 ? month : '0' + month;
        var day = (date.getDate() - 1).toString();
        day = day.length > 1 ? day : '0' + day;
        return month + '/' + day + '/' + year;
    }    
});

Я создал директиву, чтобы помочь мне в достижении этого

app.directive('datePicker', function () {
return {
    require: 'ngModel',
    scope: {
        dateRange: '=',
        maxDate: '='
    },
    link: function (scope, el, attr, ngModel) {
        if (scope.dateRange !== undefined && scope.dateRange) {
            $(el).datepicker({
                maxDate: scope.maxDate,
                minDate: '-1M',
                onSelect: function (dateText) {
                    scope.$apply(function () {
                        ngModel.$setViewValue(dateText);
                    });
                }
            });
        }
        else {
            $(el).datepicker({
                onSelect: function (dateText) {
                    scope.$apply(function () {
                        ngModel.$setViewValue(dateText);
                    });
                }
            });
        }
    }
};
});

1 Ответ

0 голосов
/ 16 октября 2018

Это недопустимая дата: "/Date(1522728000000)/" (но строка) и определенно не является действительным JSON (отметьте это здесь ).

Что вы можете сделать, это перейти кфункция getCalculatedDate a Date объект (см. это plunker ).Например, как это:

$scope.dateLimit = getCalculatedDate(new Date());

Или ... из значения 1522728000000 (что, кстати, не является допустимой датой, см. Date.parse, IETFСоответствующие RFC 2822 временные метки и версии ISO8601 ), содержащиеся в "JSON", создают дату внутри функции getCalculatedDate, например: (см. plunker ):

$scope.dateLimit = getCalculatedDate("2018-10-20T03:24:00");
// ...
function getCalculatedDate(dateNum) {
    var date = new Date(dateNum);
    // ... remainder omitted
}

Дополнительные показания (Благодаря OP, DotNetBeginner !)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...