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.