2016-03-17 2 views
1

У меня есть форму с <input type="date">.Angular.js: Дата ввода показывает дату -1 день

Когда я привязываю данные на этом входе, он показывает мне дату -1 день.

HTML-:

<div class="input-field col s12"> 
    <label>Fecha Nacimiento </label> 
    <input type="date" class="form-control" id="fnac" name="fnac" ng-model="unapersona.fnac"> 
</div> 

Контроллер:

$scope.cargarpersona = function(id) { 
    $http.get("modelos/personas_json.php?id="+id) 
    .success(function(data) { 
     $scope.unapersona = eval(data); 
     //... Other data 
     $scope.unapersona.fnac = new Date($scope.unapersona[0]["fnac"]); 
     //... Other data 
    }) 
    .error(function(data) { 
     console.log('Error: ' + data); 
    }); 
} 

Screen Capture

+1

, что дата делает $ scope.unapersona [0] ["fnac"] return? – FRECIA

+1

Какие данные возвращаются из вашего вызова ajax? – Starscream1984

+0

вернуть формат JSON '2016-03-17'. В режиме отображения списка правильно, когда я сохраняю изменения, сохраните правильно (дата +1). –

ответ

0

Вы, вероятно, работает с проблемами часовых поясов. Рассмотрим следующий код (Plunkr here)

JS

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.aDate = new Date(Date.UTC(2016, 02, 17, 0, 0, 0)); 
    $scope.aSecondDate = new Date(2016, 02, 17, 0, 0, 0); 
}); 

HTML

<body ng-controller="MainCtrl"> 
    <h4>UTC Date</h4> 
    <p>{{aDate}}</p> 
    <h4>Local Date</h4> 
    <p>{{aSecondDate}}</p> 
    </body> 

Output (на браузер CET):

UTC Date 

"2016-03-17T00:00:00.000Z" 

Local Date 

"2016-03-16T23:00:00.000Z" 

В первом случае дата устанавливается с UTC в качестве часового пояса.

Во втором случае дата устанавливается с помощью local часового пояса (настройки вашего браузера), а затем преобразуется в UTC (который в данный момент отличается от 1h от CET), и потому, что ставит дату в течение ночи, это это другой день.

+0

Извините ... с функцией Date.UTC, не показывайте никакой даты в . Я не думаю, что это проблемы с часовым поясом, потому что в окне списка отображается правильная дата –

+0

Как вы пробовали код? Можете ли вы предоставить измененный код? И можете ли вы также указать свой список в исходном вопросе? В какой часовой зоне вы находитесь? –

+0

$ scope.unapersona.fnac = new Date (Date.UTC ($ scope.unapersona [0] ["fnac"])); –

0

Я считаю, что тип date вход ожидает / вместо -, нету проверял, но надеюсь, что это работает:

.success(function(data) { 
     $scope.unapersona = eval(data); 

     var from_data = $scope.unapersona[0]["fnac"]; 
     var date_replace = from_data.replace(/-/g, '/'); 

     var date = new Date(date_replace); 
     $scope.unapersona.fnac = ((date.getMonth() + 1) + '/' + // JS months are 0 indexed and days are 1 indexed 
            date.getDate() + '/' +                     
            date.getFullYear()); 
     }) 
+0

Извините, не работайте. Это показывает неправильную дату ... –

+0

какая дата возвращается? например, если $ scope.unapersona [0] ["fnac"] был 2016-03-17? – FRECIA

+0

Да, это правильно –

4

решаемые !! Просто я поставил нг-модели-параметры = «{часовой пояс 'UTC'} в дату ввода

<input type="date" class="form-control" id="fnac" name="fnac" ng-model="unapersona.fnac" ng-model-options="{timezone:'UTC'}"> 

https://docs.angularjs.org/api/ng/directive/ngModelOptions

Спасибо за Ваши ответы и время!

формат
+2

Я просто наткнулся на это решение сам, рад, что вы его нашли :) –

Смежные вопросы