Formato Data e hora no AngularJS


123

Como exibir corretamente a data e a hora no AngularJS?

A saída abaixo mostra a entrada e a saída, com e sem o filtro de data AngularJS:

In: {{v.Dt}}  
AngularJS: {{v.Dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

Isso imprime:

In: 2012-10-16T17:57:28.556094Z 
AngularJS: 2012-10-16T17:57:28.556094Z

O formato de exibição desejado é 2010-10-28 23:40:23 0400ou2010-10-28 23:40:23 EST

Respostas:


63

v.Dt provavelmente não é um objeto Date ().

Veja http://jsfiddle.net/southerd/xG2t8/

mas no seu controlador:

scope.v.Dt = Date.parse(scope.v.Dt);

David, na minha data do caso, é armazenado no formato DD / MM / AAAA no banco de dados. Eu converto que eu mostro o formato DD.MM.YYYY do usuário na caixa de texto ou recebo a entrada do usuário nesse formato e o mesmo é atualizado no meu modelo. como mudar isso antes de passá-lo para o DB. como eu deveria mudar
Yogesh

120

Seu código deve funcionar como você vê neste violino .

Você precisará se certificar de que v.Dté um objeto Date adequado para que ele funcione.

{{dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

ou se dateFormat estiver definido no escopo como dateFormat = 'aaaa-MM-dd HH: mm: ss Z':

{{dt | date:dateFormat }}

Como o formato é uma opção cosmética, geralmente é uma idéia melhor fazer isso diretamente na visualização.
Puce

thnkx..super ans. é possível mostrar a hora no formato de 12 horas?
Vishnu Prasad

dt pode ser um timestamp unix em formato inteiro funciona muito
tom10271

não é necessário que seja um Datetipo de variável. O carimbo de data / hora por muito tempo também funciona bem
Vlad

59

Eu sei que este é um item antigo, mas pensei em lançar outra opção a considerar.

Como a cadeia original não inclui o demarcador "T", a implementação padrão no Angular não a reconhece como uma data. Você pode forçá-lo usando a nova data, mas isso é um pouco trabalhoso em uma matriz. Como você pode canalizar os filtros juntos, você poderá usar um filtro para converter sua entrada em uma data e depois aplicar a data: filter na data convertida. Crie um novo filtro personalizado da seguinte maneira:

app
.filter("asDate", function () {
    return function (input) {
        return new Date(input);
    }
});

Em sua marcação, você pode canalizar os filtros juntos:

{{item.myDateTimeString | asDate | date:'shortDate'}}

Sim, mais confiável e eficiente. Obrigado por compartilhar
azhar_SE_nextbridge 26/02

56

você pode obter o filtro 'date' assim:

var today = $filter('date')(new Date(),'yyyy-MM-dd HH:mm:ss Z');

Isso fornecerá a data de hoje no formato desejado.


lol sim, Leandro. Não sei como as coisas foram assim. Eu acho que estava pensando em 'usar'.
CodeOverRide

49

Aqui está um filtro que usará uma string de data OU objeto javascript Date (). Ele usa Moment.js e pode aplicar qualquer função de transformação Moment.js , como a popular 'fromNow'

angular.module('myModule').filter('moment', function () {
  return function (input, momentFn /*, param1, param2, ...param n */) {
    var args = Array.prototype.slice.call(arguments, 2),
        momentObj = moment(input);
    return momentObj[momentFn].apply(momentObj, args);
  };
});

Assim...

{{ anyDateObjectOrString | moment: 'format': 'MMM DD, YYYY' }}

seria exibido em 11 de novembro de 2014

{{ anyDateObjectOrString | moment: 'fromNow' }}

seria exibido 10 minutos atrás

Se você precisar chamar várias funções de momento, poderá encadeá-las. Isso converte para UTC e depois formata ...

{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}

https://gist.github.com/cmmartin/341b017194bac09ffa1a


É um método mais poderoso ! Obrigado!
precisa

2
Isso é brilhante e também pode ser combinado com o Moment Timezone. por exemplo: {{foo.created_at | momento: 'tz': 'America / New_York' | momento: 'format': 'h: mm a z'}}
Dave Collins

22

Aqui estão alguns exemplos populares:

<div>{{myDate | date:'M/d/yyyy'}}</div> 04/07/2014

<div>{{myDate | date:'yyyy-MM-dd'}}</div> 04/07/2014

<div>{{myDate | date:'M/d/yyyy HH:mm:ss'}}</div> 04/07/2014 12:01:59


simples, elegante e exatamente o que foi perguntado
Ignotus

15

Você já viu a seção Diretrizes de escrita (versão curta) da documentação ?

HTML

<div ng-controller="Ctrl2">
      Date format: <input ng-model="format"> <hr/>
      Current time is: <span my-current-time="format"></span>
</div> 

JS

function Ctrl2($scope) {
  $scope.format = 'M/d/yy h:mm:ss a';
}

2
Eu acho que seu comentário é muito válido. Aprender a fazer filtros é uma parte essencial do AngularJS. Realmente não é tão difícil.
Spock

6

Dentro de um controlador, o formato pode ser filtrado injetando $ filter.

var date = $filter('date')(new Date(),'MMM dd, yyyy');

5

Simplificando, se você deseja exibir como "30 de janeiro de 2017 às 16:31:20", siga a etapa simples

Etapa 1 - Declarar a seguinte variável no controlador js

$scope.current_time = new Date();

step2- exibir na página html como

{{current_time | data: 'médio'}}


5

podemos formatar a data no lado da vista em angular é muito fácil .... por favor, verifique o exemplo abaixo:

{{dt | data: "dd-MM-aaaa"}}


3

Você pode usar momentjspara implementar o filtro de data e hora no angularjs. Por exemplo:

angular.module('myApp')
 .filter('formatDateTime', function ($filter) {
    return function (date, format) {
        if (date) {
            return moment(Number(date)).format(format || "DD/MM/YYYY h:mm A");
        }
        else
            return "";
    };
});

Onde a data está no formato de carimbo de data / hora.


1

Adicione $filterdependência no controlador.

var formatted_datetime = $filter('date')(variable_Containing_time,'yyyy-MM-dd HH:mm:ss Z')

2
Embora esse trecho de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código. Por favor, tente também não sobrecarregar seu código com comentários explicativos, pois isso reduz a legibilidade do código e das explicações!
kayess

0

Eu sugiro que você use o moment.js, ele tem um bom suporte para a formatação de datas de acordo com as localidades.

crie um filtro que use internamente o método moment.js para formatar a data.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.