Почему angularjs bootstrap datepicker выбирает за день до этого?

Я использую директиву angularjs bootstrap datepicker, и когда я устанавливаю дату из модели, она выбирает день до выбранной даты.

<button type="button" class="btn btn-sm btn-default" ng-click="dt = '2014-09-24'">2014-09-24</button>

Вот набросок с этой проблемой.

Есть ли решение?


person Charger513    schedule 01.09.2014    source источник


Ответы (4)


Это связано с тем, как JS изначально обрабатывает даты. Команда AngularUI упоминает об этом в документации.

Вот одно из решений: Angular-UI One day is вычитается из даты в ui-date

person Antiga    schedule 01.09.2014
comment
Этот ответ касается angular-ui, но вопрос касается средства выбора даты angular-bootstrap. - person user1338062; 10.08.2015
comment
Если вы нажмете на ссылку в вопросе, вы увидите, что он использует Angular UI Datepicker. - person Antiga; 10.08.2015

Для тех, кому нужно решение в мире .NET Web Api, эта строка хорошо сработала для меня:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;

Это произошло из-за того, что JsonFormatter выдал время в неправильном часовом поясе.

person John Lee    schedule 26.02.2015
comment
У меня, использующего Web API2, была та же проблема на стороне Angular, ваша оказалась именно тем, что прописал доктор. Спасибо - person stephen ebichondo; 25.07.2015
comment
Это именно то, что я искал. - person Usman Khalid; 18.09.2015
comment
это лучший ответ, если вы используете веб-API в качестве серверной части, и спасибо, что поделились этим @john lee - person Atul Chaudhary; 06.01.2017

мое решение состоит в том, чтобы использовать директиву для исправления проблемы минус 1, а также для форматирования значений представления и модели:

app.directive('ngBootstrapFix',['$filter', function($filter) {
  return {
    require: 'ngModel',
    priority: 1,
    link: function($scope, $element, $attrs, ngModelCtrl) {
      ngModelCtrl.$parsers.push(function(viewValue) {
        viewValue = $filter('date')(viewValue, 'yyyy-MM-dd');
        return viewValue;
      });
      ngModelCtrl.$render = function() {
        var val = $filter('date')(ngModelCtrl.$viewValue, 'dd/MM/yyyy');
        $element.val(val);
      };
    }
  };
}]);
person Aladdin Mhemed    schedule 01.02.2015
comment
это не сработало для меня, я вижу, что фильтр выполняется, но никаких изменений при выборе предыдущего дня. - person ebt; 11.08.2015
comment
Да, здесь фильтр выполняется, но без изменений - person ericsicons; 11.09.2015

Я только что инициализировал ngModel с помощью new Date(), и после этого дата была установлена ​​​​правильно, даже после того, как я изменил ее с помощью средства выбора даты!

person Claude    schedule 12.08.2016