Eu tenho uma entrada definida como
<input class="datepicker" type="text" ng-model="clientForm.birthDate" />
Que é preparado para ser exibido em outro lugar na página:
<tr>
<th>Birth Date</th>
<td>{{client.birthDate|date:'mediumDate'}}</td>
</tr>
Quando a página carrega, a data de nascimento é formatada de maneira agradável como algo parecido Dec 22, 2009
. No entanto, quando eu olho dentro do meu <input>
, é mostrado como Tue Dec 22 2009 00:00:00 GMT-0800 (Pacific Standard Time)
o JS renderiza Date
objetos como strings.
Em primeiro lugar, como faço para dizer ao Angular para mostrar a data no <input>
como algo como 12/22/2009
? Não consigo aplicar |filters
dentro do ng-model
atributo.
Em segundo lugar, assim que edito a data, mesmo mantendo-a no formato original, meu outro texto (dentro do <td>
) parece não aplicar mais o |date
filtro; ele muda repentinamente de formato para corresponder ao da caixa de texto de entrada. Como faço para que ele aplique o |date
filtro sempre que o modelo mudar?
Perguntas relacionadas:
Date()
funções js padrão :$scope.departDate = new Date(); $scope.departTime = $scope.departDate.toTimeString().slice(0, 5);
E não há necessidade de outros filtros ou soluções alternativas complicadas no AngularJS IMO.Respostas:
Use a validação personalizada de formulários http://docs.angularjs.org/guide/forms Demo: http://plnkr.co/edit/NzeauIDVHlgeb6qF75hX?p=preview
Diretiva usando formadores e analisadores e MomentJS )
fonte
var dateFormat = attrs.moMediumDate;
e nãovar dateFormat = attrs.moDateInput;
moMediumDate não parece estar definido em nenhum lugar, então se as entradas não forem criadas dinamicamente, um formato inicial nunca é selecionado.Aqui está uma diretiva angular datetime muito útil . Você pode usá-lo assim:
Ele também adiciona uma máscara à sua entrada e executa a validação.
fonte
datetime="<format>"
valor do atributo corresponde ao formato especificado nadateFormat
opção do Datepicker .Eu criei uma diretiva simples para permitir que
input[type="date"]
elementos de formulário padrão funcionem corretamente com AngularJS ~ 1.2.16.Olhe aqui: https://github.com/betsol/angular-input-date
E aqui está a demonstração: http://jsfiddle.net/F2LcY/1/
fonte
Estou usando o jquery datepicker para selecionar a data. Minha diretiva lê a data e converte para o formato de data json (em milissegundos), armazena em
ng-model
dados enquanto exibe a data formatada. E reverte se o modelo ng tem data json (em milissegundos), meu formatador exibe em meu formato como jquery datepicker.Código HTML:
Diretiva Angular:
fonte
element.datepicker
comelement.pickadate
Já que você usou datepicker como classe, estou assumindo que está usando um datepicker Jquery ou algo semelhante.
Existe uma maneira de fazer o que você pretende sem usar moment.js, usando apenas as diretivas datepicker e angularjs.
Eu dei um exemplo aqui neste Fiddle
Trechos do violino aqui:
Datepicker tem um formato diferente e o formato angularjs é diferente, precisa encontrar a correspondência apropriada para que a data seja pré-selecionada no controle e também seja preenchida no campo de entrada enquanto o modelo ng é vinculado. O formato abaixo é equivalente ao
'mediumDate'
formato de AngularJS.A diretiva de entrada de data precisa ter uma variável de string provisória para representar a forma legível de data.
A atualização em diferentes seções da página deve acontecer por meio de eventos, como
$broadcast
e$on
.Usar filtro para representar a data em forma legível por humanos também é possível no modelo ng, mas com uma variável de modelo temporária.
fonte
Eu uso a seguinte diretiva que deixa a mim e a muitos usuários muito felizes! Ele usa o momento para análise e formatação. Parece um pouco com o de SunnyShah, mencionado anteriormente.
No meu formulário, eu o uso assim:
Isso vinculará um carimbo de data / hora (milissegundos desde 1970) a
doc.begin
edoc.end
.fonte
ngModel
está o seu identificador personalizado para o argumento do controlador, não uma referência direta nomeadangModel
. Este é um ponto onde a convenção de nomear aquele arg 'ctrl' ou 'controlador' mantém as coisas mais claras e evita confusão.No Angular2 + para qualquer pessoa interessada:
com tipos de filtros em DatePipe Angular.
fonte
Prefiro que o servidor retorne a data sem modificação, e que o javascript faça a massagem da visualização. Minha API retorna "MM / DD / AAAA hh: mm: ss" do SQL Server.
Recurso
Controlador
Diretiva de validação myDate
HTML
template / validation / messages.html
fonte
Angularjs ui bootstrap você pode usar o angularjs ui bootstrap, ele fornece validação de data também
no controlador pode especificar qualquer formato que você deseja exibir a data como datafiltro
$ scope.formats = ['dd-MMMM-aaaa', 'aaaa / MM / dd', 'dd.MM.aaaa', 'shortDate'];
fonte