Open joaoks opened 8 years ago
@joaoks sua data esta em string? exemplo: '1988-07-01',
ou é uma ISO String, exemplo: '1988-08-01T03:00:00.000Z'
Ta como string mesmo
então creio q seja este o problema, o correto é trabalhar com o type date, ever, seja por Date, ou por ISOString
certo no caso aqui eu to pegando retorno direto do laravel, em algum dos lados vou ter que converter pra Date. Mas eu tava vendo que é utilzado o momentjs nessa mascara, no caso ela deveria aceitar a data em string normalmente.
outra coisa que notei aqui eu usei o filtro do moment para exibir em uma tabela os dados e fiz teste tanto como data normal como string e como timestamp e funcionou normalmente, mas no caso da mascara nao funciona mesmo
Também estou com o mesmo problema, segue o formato da data: "2016-04-27T12:00:00Z". @darlanmendonca pode ajudar?
só transforme essa data em Date e irá funcionar corretamente
$scope.data = new Date('2016-04-27T12:00:00Z');
No meu caso o formato da data é 2016-10-10T03:00:00.000Z
porém queria que ele o valor ficasse o mesmo da input que no caso é 10/10/2016
.
Assim como o @danieloprado comentou, tem como fazer isso usando
$scope.data = new Date('2016-04-27T12:00:00Z');
mas fazer isso para todos os controles que tenho fica complicado.
Poderia ter um parâmetro onde passo o valor para o formato de saída tipo:
<input ng-model="birth" ui-date-mask="dd/MM/yyyy" />
Ou se tiver alguma outra forma de generalizar o formato do ng-model...
O ideal é transformar todas as string de data na camada de service/factory e trabalhar sempre com o tipo DATE, lógico que isso varia de caso para caso.
Eu criei esse factory para me auxiliar nisso, ele verifica se a key de um object contem 'date' e faz a troca, ou passa um array com as keys:
(function(angular) {
'use strict';
angular.module('app').factory('dateHelper', [
'moment',
DateHelper
]);
function DateHelper(moment) {
function parseObj(obj, fields) {
if (!fields) {
fields = Object.keys(obj).filter(x => x.toLowerCase().indexOf('date') > -1);
}
fields.forEach(key => {
if (!obj[key]) return;
obj[key] = new Date(obj[key]);
});
return obj;
}
return { parseObj };
}
})(angular);
Chamada:
$http.get(`${API}/appointment`).then(response => {
return response.data.map(item => dateHelper.parseObj(item));
});
//ou
$http.get(`${API}/appointment`).then(response => {
return response.data.map(item => dateHelper.parseObj(item, ['create', 'date', 'foo']));
});
//ou apenas um object
dateHelper.parseObj({ name: 'Daniel Prado', birthday: '2016-04-27T12:00:00Z'}, ['birthday']);
Fica mais fácil de trabalhar se todos dates que vem da api serem dates mesmo. Quando enviar para o servidor é bom mandar em ISO pois pode ter problemas com timezone.
É apenas uma dica ;)
Obrigado @danieloprado pela sugestão, vou ver se cabe essa implementação ao meu caso!
No meu caso, as datas estão chegando em timestamp, o que eu faço?
Quando eu retorno pro meu objeto no $scope uma data no formato americano a mascara de data se perde e traz errado, por exemplo: No input inicialmente mandei 01/07/1988 ele gravou no banco com a data americana 1988-07-01 quando eu retorno pro mesmo campo a data 1988-07-01 ele formata a data como 19/88/0701, acredito que a formatação de data deveria detectar em qual formato ela está e formatar corretamente.