Angular JS UI Bootstrap Datepicker:最大日期和初始日期问题

时间:2014-10-21 15:05:43

标签: javascript angularjs datepicker angular-ui-bootstrap

我一直在这一天...无论如何,我一直在帮助一些同事使用AngularJS项目而且错误很多,无论如何......我正在使用AngularJS UI Bootstrap Datepicker版本0.11.2使用AngularJS 1.3版。到目前为止,我希望将当天的最短日期设定为2个月,最长日期为当天的六个月,初始日期为当天的2个月。这就是我到目前为止所做的:

查看

<div data-datepicker
     data-ng-model="dt"
     data-min-date="minDate"
     data-max-date="maxDate"
     data-max-mode="day"
     data-show-weeks="false"
     data-starting-day="1"
     data-year-range="2"
     class="custom-date-picker"></div>

并在我的控制器中......

 var today = new Date(),
    twoMonth = today.setMonth(today.getMonth() + 2),
    sixMonth = today.setMonth(today.getMonth() + 6);

$scope.today = function() {
    $scope.minDate = twoMonth;
    $scope.maxDate = sixMonth;
};

$scope.today();

这一切都发现但是我注意到minDate是正确的,maxDate实际上是将来8个月,当我在指令中添加以下内容以设置初始日期时所以(注意data-init-date="minDate"

<div data-datepicker
     data-ng-model="dt"
     data-init-date="minDate"
     data-min-date="minDate"
     data-max-date="maxDate"
     data-max-mode="day"
     data-show-weeks="false"
     data-starting-day="1"
     data-year-range="2"
     class="custom-date-picker"></div>

我收到以下错误!

TypeError: undefined is not a function
at e._refreshView (js/vendor/angular/ng-ui-bootstrap-tpls-0.11.2.min.js:8:16705)
at refreshView (js/vendor/angular/ng-ui-bootstrap-tpls-0.11.2.min.js:8:13968)
at link (js/vendor/angular/ng-ui-bootstrap-tpls-0.11.2.min.js:8:17848)
at B (js/vendor/angular/angular-1.3.0-beta.18.min.js:55:369)
at js/vendor/angular/angular-1.3.0-beta.18.min.js:62:378
at g (js/vendor/angular/angular-1.3.0-beta.18.min.js:48:105)
at js/vendor/angular/angular-1.3.0-beta.18.min.js:47:233
at js/vendor/angular/angular-1.3.0-beta.18.min.js:49:54
at Object.r [as transclude] (js/vendor/angular/angular-1.3.0-beta.18.min.js:52:497)
at js/vendor/angular/angular-1.3.0-beta.18.min.js:215:316 <table role="grid" aria-labelledby="{{uniqueId}}-title" aria-activedescendant="{{activeDateId}}" ng-switch-when="day" tabindex="0">

有谁知道我哪里出错了?

1 个答案:

答案 0 :(得分:2)

请务必注意,您的日期会在此变异:

var today = new Date(),
    twoMonth = today.setMonth(today.getMonth() + 2),
    sixMonth = today.setMonth(today.getMonth() + 6);

每个setMonth调整原始日期。因此八个月的问题。

后一个问题是由twoMonthsixMonth是数字引起的。我认为你的指令需要Dates,所以用new Date(...)包装它们。

解决方案

我认为这样的事情应该有效:

var twoMonth = offsetMonths(2);
var sixMonth = offsetMonths(6);

function offsetMonths(offset) {
    var ret = new Date();

    ret.setMonth(ret.getMonth() + offset);

    return new Date(ret);
}

当然,你可以使用像moment.js这样的东西来简化事情。