【问题标题】:Angular Datepicker MinDate disabling one day behindAngular Datepicker MinDate 在一天后禁用
【发布时间】:2016-02-16 20:03:26
【问题描述】:

我正在使用 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 日

为什么会这样?

【问题讨论】:

    标签: javascript angularjs datepicker angular-ui-bootstrap


    【解决方案1】:

    这个日期选择器uses the browser timezone for datesan 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;
    

    【讨论】:

    • 我的约会对象没有时间。即使我尝试按照您的建议明确设置它,它也不起作用。日历还差一天
    • @MB 任何 Javascript Date 对象都有时间 - 如果您不自己设置,则默认为 00:00:00.000
    • @MB,我已经用 Plunker 更新了我的答案。它为我工作。查看 example.js 文件。
    • 感谢您的编辑。它的工作!不知道我的有什么问题。我正在使用带有日期的字符串。我猜它解析错误...??
    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多