J'utilise le sélecteur de date ( ng-boostrap ) dans une fenêtre popup et je voudrais changer le format de la date en dd-mm-yyyy
.
Il semble que ce problème puisse être résolu en mettant en œuvre une nouvelle NgbDateParserFormatter
pour remplacer l'option par défaut NgbDateISOParserFormatter
.
Mais je me demandais s'il y avait un autre moyen.
UPDATE :
Une petite mise en œuvre de NgbDateParserFormatter
en utilisant Moment.js (testé avec la version 1.0.0-alpha.14 de ng-bootstrap) :
import {NgbDateParserFormatter, NgbDateStruct} from '@ng-bootstrap/ng-bootstrap';
import * as moment from 'moment';
export class NgbDateMomentParserFormatter extends NgbDateParserFormatter {
constructor(private momentFormat: string) {
super();
};
format(date: NgbDateStruct): string {
if (date === null) {
return '';
}
let d = moment({ year: date.year,
month: date.month - 1,
date: date.day });
return d.isValid() ? d.format(this.momentFormat) : '';
}
parse(value: string): NgbDateStruct {
if (!value) {
return null;
}
let d = moment(value, this.momentFormat);
return d.isValid() ? { year: d.year(),
month: d.month() + 1,
day: d.date() } : null;
}
}
Et dans un module, vous incluez le fournisseur en utilisant une usine pour indiquer le format de date comme paramètre :
---
@NgModule({
---
providers: [
{
provide: NgbDateParserFormatter,
useFactory: () => { return new NgbDateMomentParserFormatter("DD-MM-YYYY") }
}
]
---
})
1 votes
Attention - moment s'attend à ce que les mois indexés soient nuls. Votre code échoue chaque jour de décembre.
0 votes
Merci @David, j'ai corrigé le code. Lorsque j'ai posté le code, NgbDateStruct utilisait également des mois indexés à zéro, mais cela a changé par la suite.
0 votes
@Nelson J'ai essayé votre approche. J'ai ajouté des fournisseurs dans le module principal de mon application pour modifier le format de la date de mon composant de sélection de date. Mais cela ne fonctionne pas. Aidez-moi.
0 votes
@MohanRam Pourriez-vous partager votre code ?
6 votes
Notez que, dans une version plus récente d'Angular 4, useFactory sur les providers n'existe plus. Utilisez plutôt : useValue : new NgbDateMomentParserFormatter("DD-MM-YYYY")
0 votes
À ce jour, cela fonctionne toujours avec le correctif de @HammerNL. Merci !
0 votes
Le contenu de votre mise à jour a parfaitement fonctionné pour moi ! Merci !