在AngularJS中为jQuery datepicker动态设置最大限制

Posted

技术标签:

【中文标题】在AngularJS中为jQuery datepicker动态设置最大限制【英文标题】:Set dynamically max limit to jQuery datepicker in AngularJS 【发布时间】:2019-03-21 11:05:34 【问题描述】:

在我的应用程序中,最大日期是根据一些逻辑计算的。日期是 JSON 日期。它将用于设置最大日期。

为了显示问题,我创建了一个 plunker 链接 (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"/>

在我的控制器中,我尝试将 JSON 日期转换为 mm/dd/yy 日期字符串。为此,我创建了一个函数getcalculateddDate 接受

在 chrome 开发工具控制台中评估我的日期

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);
                    );
                
            );
        
    
;
);

【问题讨论】:

没有“JSON 日期”。见Convert .NET date format into javascript dateWhere can I find documentation on formatting a date in JavaScript? 【参考方案1】:

这不是一个有效的日期:"/Date(1522728000000)/"(而是一个字符串)并且绝对不是一个有效的 JSON(检查它here)。

您可以做的是将getCalculatedDateDate object 传递给函数(参见plunker)。比如这样:

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

或者...从“JSON”中包含的值1522728000000(顺便说一句,它不是有效日期,请参阅Date.parse、IETF-compliant RFC 2822 timestamps 和version of ISO8601)在@987654336 中创建日期@这样的函数(见plunker):

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

其他阅读材料(感谢 OP,DotNetBeginner!)

Convert .NET date format into JavaScript date Where can I find documentation on formatting a date in JavaScript?

【讨论】:

这就是我从 mvc 控制器到 angularjs 控制器的日期。请检查我在问题中添加的屏幕截图 好吧,您可能需要解决这个问题(如果您是 mvc 控制器程序员)。否则,您将不得不应用一些解决方法。正如你肯定能够检查new Date($scope.scheduleDate)Invalid Date 同时检查链接 谢谢,知道了。我忽略了你提到的一些事情 @DotNetBeginner 太棒了!我会将这些链接添加到帖子中,以便未来的读者可以轻松找到它。

以上是关于在AngularJS中为jQuery datepicker动态设置最大限制的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:AngularJS 渲染模板后如何运行附加代码?

AngularJS – 如何在 Jasmine 中为输入事件指令编写单元测试

在 AngularJS 中为 $http 服务使用 JSONP 方法

在angularjs中为多个控制器路由?

在angularjs中为多个控制器路由?

如何在 Rails 4 中为 AngularJS 更正设置根路由?