Angular Datepicker MinDate禁用一天后

时间:2016-02-16 20:03:27

标签: javascript angularjs datepicker angular-ui-bootstrap

我正在使用Angular Bootstrap Datepicker,我设置了这样的min-date属性:

<input type="text" class="" uib-datepicker-popup="MM/dd/yyyy" 
       show-button-bar="false" ng-model="vm.date" ng-change="vm.DateChanged()" 
       min-date="vm.minDate" date-disabled="vm.disabledDates(date,mode)" />

在我的控制器中将minDate设置为:(如控制台中所示)

vm.minDate = '2016-02-19'

但是,我的日历即将推出 2月18日

calendar

为什么会这样?

1 个答案:

答案 0 :(得分:2)

此日期选择器uses the browser timezone for dates。有an open request提供UTC支持或提供某种方式来设置特定时区甚至更好,使用日期而不考虑时区。

由于我们还不能做到这一点,你可以使用UTC日期格式来解决这个问题:

vm.minDate = '2016-02-19T00:00:00Z'

在这个GitHub thread中,人们建议使用其他解决方案,例如this one,它通过使用时区偏移更正日期来设置使用UTC的指令:

ngModelCtrl.$formatters.push(function (value) {
    var date = new Date(value);

    if (isNaN(date) || (value == null)) {
        return value;  // needed for null/empty/undefined values
    }

    date.setMinutes(date.getTimezoneOffset());  // forces the "local" version of the date to match the intended UTC date

    return date;  // yes, this is a Date object being applied to the $viewValue...don't judge, it works!
});

修改:我已经创建了Plunker来测试它。我用过的东西:

var date = new Date('2016-02-19');
date.setMinutes(date.getTimezoneOffset());
$scope.minDate = date;