2016-03-02 9 views
119

Sto utilizzando il tubo della data per formattare la data, ma non riesco a ottenere il formato esatto che desidero senza soluzione. Sto comprendendo i tubi erroneamente o non è possibile?Come formattare la data come gg/MM/aaaa in Angolare 2 usando le pipe?

//our root app component 
import {Component} from 'angular2/core' 

@Component({ 
    selector: 'my-app', 
    providers: [], 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
     <h3>{{date | date: 'ddMMyyyy'}}, should be 
     {{date | date: 'dd'}}/{{date | date:'MM'}}/{{date | date: 'yyyy'}}</h3> 

    </div> 
    `, 
    directives: [] 
}) 
export class App { 
    constructor() { 
    this.name = 'Angular2' 
    this.date = new Date(); 
    } 
} 

plnkr view

+2

La pipe 'date' ha diversi problemi al momento. –

+0

Questa release candidate sembra ancora un po 'incompiuta. Questo è il secondo numero che ho inciampato in 2 giorni .. speriamo che lo risolvano presto. Creare le proprie pipe per questo è un'opzione, ma sembra un po 'come la duplicazione .. e puoi rimuoverlo in pochi mesi .. –

+0

Possibile duplicato di [Come impostare la localizzazione in DatePipe in Angular2?] (Http: // stackoverflow .com/questions/34904683/how-to-set-locale-in-datepipe-in-angular2) – nsbm

risposta

197

tubo formato della data bug in angolare 2.0.0-rc.2, this Pull Request.

Ora possiamo fare il modo convenzionale:

{{valueDate | date: 'dd/MM/yyyy'}} 

Esempi:

Current Version:

Plunker Angular 5.2.x


prossima versione:

Plunker Angular 6.0.x


vecchie versioni:

Plunker Angular 2.x

Plunker Angular 4.x


More info in documentation DatePipe

+1

grazie, vorrei solo aggiungere ulteriori suggerimenti per il problema del formato IE11 ++, cf. https://stackoverflow.com/questions/39728481/angular2-date-pipe-does-not-work-in-ie-11-and-edge-13-14 – boly38

+0

In Angular 5 questo è stato apparentemente risolto @ boly38, seguire la aggiornamento in risposta. E la mia risposta in questione è stata collegata: https://stackoverflow.com/a/46218711/2290538 –

9

Sto usando questo soluzione temporanea:

import {Pipe, PipeTransform} from "angular2/core"; 
import {DateFormatter} from 'angular2/src/facade/intl'; 

@Pipe({ 
    name: 'dateFormat' 
}) 
export class DateFormat implements PipeTransform { 
    transform(value: any, args: string[]): any { 
     if (value) { 
      var date = value instanceof Date ? value : new Date(value); 
      return DateFormatter.format(date, 'pt', 'dd/MM/yyyy'); 
     } 
    } 
} 
+0

Sono nuovo di angular 2 e sto avendo problemi a ottenere questo andare . L'ho aggiunto nel proprio file TS (compilato in js). Ho provato diverse cose, tra cui l'aggiunta come fornitore sul componente app, quindi nel costruttore di mio figlio compoment, ma non riuscivo a farlo andare. L'errore è; "Impossibile trovare il formato data" pipe ". Puoi darmi una rapida panoramica su come implementarlo per favore. Ecco i pacchetti che sto utilizzando "dipendenze" : {"angular2": "2.0.0-beta.17", "systemjs": "0.19.25", "es6-shim": "^ 0.35.0" , "reflect-metadata": "0.1.2", "rxjs": "5.0.0-beta.2", "zone.js": "0.6.10"}, –

+0

Puoi plunker per favore codice Farò la correzione. Si prega di utilizzare l'ultima versione di angular2 –

+0

@Deepakrao Che cos'è 'pt' qui? E come chiamo questa pipa nel mio componente? come let date = new DateFormat(). transform (input); Per favore correggimi. E se voglio visualizzare hh: mm, ovvero il tempo – Protagonist

3

L'unica cosa che ha funzionato per me è stato ispirato da qui: https://stackoverflow.com/a/35527407/2310544

Per puro dd/MM/yyyy, questo ha funzionato per me, con angolare 2 beta 16:

{{ myDate | date:'d'}}/{{ myDate | date:'MM'}}/{{ myDate | date:'y'}} 
+0

questo è un trucco abbastanza leggibile per le versioni beta, non so perché è stato downvoted ma lo riporterò a zero;) –

48

Importa DatePipe da angolare/comune e quindi utilizzare il codice qui sotto

var datePipe = new DatePipe(); 
    this.setDob = datePipe.transform(userdate, 'dd/MM/yyyy'); 

dove userdate sarà la stringa data. Vedere se questo aiuta.

Annotare la minuscola per la data e l'anno:

d- date 
M- month 
y-year 
+0

Questo, per qualche motivo sembra essere molto pesante Stiamo facendo la stessa cosa (sul rilevamento dei cambiamenti) e stiamo prendendo il 75% del tempo di esecuzione della nostra app – sixtyfootersdude

+7

Con Angular 2.1.1, questo errore viene generato 'I parametri forniti non corrispondono a nessuna firma dell'obiettivo di chiamata. Su' new DatePipe() ' – saiy2k

+6

Puoi usare qualcosa come' new DatePipe ('en-US'); ' –

1

È inoltre possibile utilizzare momentjs per questo genere di cose. Momentjs è il migliore per analizzare, convalidare, manipolare e visualizzare le date in JavaScript.

Ho usato questo tubo da Urish, che funziona bene per me:

https://github.com/urish/angular2-moment/blob/master/src/DateFormatPipe.ts

Nei args parametro si può mettere il formato della data come: "dd/mm/aaaa"

+0

link non funzionante, il link è ora https://github.com/urish/angular2-moment/blob/master/src/date-format .pipe.ts – Tony

10

I usa sempre Moment.js quando ho bisogno di usare le date per qualsiasi motivo.

Prova questa:

import { Pipe, PipeTransform } from '@angular/core' 
import * as moment from 'moment' 

@Pipe({ 
    name: 'formatDate' 
}) 
export class DatePipe implements PipeTransform { 
    transform(date: any, args?: any): any { 
    let d = new Date(date) 
    return moment(d).format('DD/MM/YYYY') 

    } 
} 

E nella vista:

<p>{{ date | formatDate }}</p> 
+2

La libreria 'moment' è troppo grande per un piccolo lavoro come il formato! –

10

È possibile raggiungere questo obiettivo usando da un semplice tubo personalizzato.

import { Pipe, PipeTransform } from '@angular/core'; 
import { DatePipe } from '@angular/common'; 

@Pipe({ 
    name: 'dateFormatPipe', 
}) 
export class dateFormatPipe implements PipeTransform { 
    transform(value: string) { 
     var datePipe = new DatePipe("en-US"); 
     value = datePipe.transform(value, 'dd/MM/yyyy'); 
     return value; 
    } 
} 


{{currentDate | dateFormatPipe }} 

vantaggio di utilizzare un tubo personalizzato è che, se si desidera aggiornare il formato della data, in futuro, si può andare e aggiornare il tubo di costume e si rifletterà in ogni dove.

Custom Pipe examples