Versión en castellano: https://dev.to/amatosg/formateando-selector-de-fechas-en-angular-3p8i
When dealing with dates, formatting is crucial to understand each other: 12/01/2020
is not the same as 01/12/2020
.
So an input field having the proper format is actually pretty important. With Angular this can be tricky as NgbDateParserFormatter
will display dates using yyyy-MM-dd
format:
I've been postponing this issue for too long, so I decided to fix it and display the proper dd/MM/yyyy
format every region uses (if there is any region not using it, well...they should).
Custom Formatter
We need to create a new file, I called it shared/component/ngb-custom-date-parser-formatter.ts
containing the following code:
import { NgbDateParserFormatter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; import { Injectable } from '@angular/core'; import * as moment from 'moment'; @Injectable() export class NgbCustomDateParserFormatter extends NgbDateParserFormatter { constructor(private momentFormat: string) { super(); }; format(date: NgbDateStruct): string { if (date === null) { return ''; } const 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; } const d = moment(value, this.momentFormat); return d.isValid() ? { year: d.year(), month: d.month() + 1, day: d.date() } : null; } }
Then, in my app.module.ts
I added the following line to the providers
section:
{ provide: NgbDateParserFormatter, useValue: new NgbCustomDateParserFormatter("DD/MM/YYYY") // <== format! }
Et voila, you will have it your way :)
PD: hopefully this will make it to the next release of JHipster ;)
Top comments (1)
FYI to get this to work you need to remove the "@Injectable" and change the constructor to:
constructor(@Inject(String) private momentFormat: string) {