Formato Data e ora in AngularJS


123

Come faccio a visualizzare correttamente la data e l'ora in AngularJS?

L'output di seguito mostra sia l'input che l'output, con e senza il filtro della data AngularJS:

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

Questo stampa:

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

Il formato di visualizzazione desiderato è 2010-10-28 23:40:23 0400o2010-10-28 23:40:23 EST

Risposte:


63

v.Dt probabilmente non è un oggetto Date ().

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

ma nel tuo controller:

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

David nel mio caso la data è memorizzata nel formato GG / MM / AAAA nel database. Lo converto lo mostro in formato DD.MM.YYYY utente nella casella di testo o prendo l'input dell'utente in quel formato e lo stesso viene aggiornato nel mio modello. come cambiarlo prima di passarlo a DB. come dovrei cambiare
Yogesh

120

Il tuo codice dovrebbe funzionare come hai visto questo violino .

Dovrai assicurarti che il tuo v.Dtsia un oggetto Date appropriato affinché funzioni.

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

o se dateFormat è definito nell'ambito come dateFormat = 'yyyy-MM-dd HH: mm: ss Z':

{{dt | date:dateFormat }}

Poiché il formato è un'opzione cosmetica, in genere è un'idea migliore farlo direttamente nella vista.
Puce

thnkx..super ans. è possibile visualizzare l'ora nel formato 12 ore?
Vishnu Prasad

dt può essere un timestamp unix anche in formato intero funziona
tom10271

non è necessario che sia un Datetipo per variabile. Anche il timestamp lungo funziona bene
Vlad

59

So che questo è un vecchio oggetto, ma ho pensato di aggiungere un'altra opzione da considerare.

Poiché la stringa originale non include il demarker "T", l'implementazione predefinita in Angular non la riconosce come una data. Puoi forzarlo usando la nuova data, ma questo è un po 'un problema per un array. Dal momento che puoi raggruppare i filtri insieme, potresti essere in grado di utilizzare un filtro per convertire il tuo input in una data e quindi applicare la data: filtro alla data di conversione. Crea un nuovo filtro personalizzato come segue:

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

Quindi, nel tuo markup, puoi raggruppare i filtri insieme:

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

Sì, più affidabile ed efficiente .. Grazie per la condivisione
azhar_SE_nextbridge

56

puoi ottenere il filtro "data" in questo modo:

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

Questo ti darà la data odierna nel formato che desideri.


lol sì, Leandro. Non so come sia successo così. Penso che stavo pensando "usa".
CodeOverRide

49

Ecco un filtro che accetta una stringa di data O un oggetto Date () javascript. Utilizza Moment.js e può applicare qualsiasi funzione di trasformazione Moment.js , come il popolare "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);
  };
});

Così...

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

verrà visualizzato l' 11 novembre 2014

{{ anyDateObjectOrString | moment: 'fromNow' }}

verrebbe visualizzato 10 minuti fa

Se è necessario chiamare più funzioni momento, è possibile concatenarle. Questo converte in UTC e quindi formatta ...

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

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


È un metodo più potente ! Grazie!
Modder

2
Questo è fantastico e può anche essere combinato con Moment Timezone. ad esempio: {{foo.created_at | momento: 'tz': 'America / New_York' | moment: 'format': 'h: mm a z'}}
Dave Collins,

22

Ecco alcuni esempi popolari:

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

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

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


semplice, elegante ed esattamente quello che è stato chiesto
Ignotus

15

Hai visto la sezione Direttive di scrittura (versione breve) della documentazione ?

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
Penso che il tuo commento sia molto valido. Imparare a fare filtri è una parte essenziale di AngularJS. Non è davvero così difficile.
Spock

6

All'interno di un controller il formato può essere filtrato iniettando $ filter.

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

5

Semplicemente se vuoi produrre un output come "Jan 30, 2017 4:31:20 PM", segui il semplice passaggio

step1- Dichiara la seguente variabile nel controller js

$scope.current_time = new Date();

step2- visualizzazione nella pagina html come

{{current_time | Data: 'medium'}}


5

possiamo formattare la data sul lato di visualizzazione in angolare è molto semplice .... controlla l'esempio seguente:

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


3

È possibile utilizzare momentjsper implementare il filtro data-ora in angularjs. Per esempio:

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 "";
    };
});

Dove la data è in formato timestamp.


1

Aggiungi $filterdipendenza nel controller.

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

2
Sebbene questo snippet di codice possa risolvere la domanda, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice. Cerca anche di non affollare il tuo codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni!
kayess

0

Ti suggerirei di usare moment.js che ha un buon supporto per la formattazione della data in base alle impostazioni locali.

creare un filtro che utilizzi internamente il metodo moment.js per la formattazione della data.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.