I am creating an Angular 10 application. In my component I have used Angular Bootstrap datepicker control. The default date format shown in the textbox is 'yyyy-mm-dd'. But I want the format in 'dd-mm-yyyy'. So I have created a service and put in my Core Module. The service code is below:
import { Injectable } from '@angular/core';
import { NgbDateParserFormatter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
import { isNumber, padNumber, toInteger } from '@ng-bootstrap/ng-bootstrap/util/util';
@Injectable()
export class CustomDateFormatterService extends NgbDateParserFormatter {
parse(value: string): NgbDateStruct {
if (value) {
const dateParts = value.trim().split('-');
if (dateParts.length === 1 && isNumber(dateParts[0])) {
return {day: toInteger(dateParts[0]), month: null, year: null};
} else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {
return {day: toInteger(dateParts[0]), month: toInteger(dateParts[1]), year: null};
} else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {
return {day: toInteger(dateParts[0]), month: toInteger(dateParts[1]), year: toInteger(dateParts[2])};
}
}
return null;
}
format(date: NgbDateStruct): string {
return date ?
`${isNumber(date.day) ? padNumber(date.day) : ''}/${isNumber(date.month) ? padNumber(date.month) : ''}/${date.year}` :
'';
}
}
And my Core Module is:
import { ErrorHandler, NgModule, Optional, SkipSelf } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { ClientSideErrorHandlerService } from './error-handler-service/client-side-error-handler.service';
import { ApiService } from './api-service/api.service';
import { HttpErrorHandlerServiceService } from './http-error-handler-service/http-error-handler-service.service';
import { NgbDateParserFormatter, NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { CustomDateFormatterService } from './date-formatter-service/custom-date-formatter.service';
@NgModule({
imports: [
CommonModule,
HttpClientModule,
NgbModule,
],
declarations: [],
exports: [
//NgbModule,
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: HttpErrorHandlerServiceService, multi: true },
{ provide: ErrorHandler, useClass: ClientSideErrorHandlerService },
{ provide: NgbDateParserFormatter, useClass: CustomDateFormatterService },
ApiService,
]
})
export class CoreModuleModule {
constructor(@Optional() @SkipSelf() core: CoreModuleModule) {
if (core) {
throw new Error("You should import core module only in the root module")
}
}
}
But I am getting the below error:
./src/app/core-module/date-formatter-service/custom-date-formatter.service.ts Module not found: Error: Can't resolve '@ng-bootstrap/ng-bootstrap/util/util' in 'D:\Workspace\My Projects\e-Cash Apps\eCash-Web\src\app\core-module\date-formatter-service'
Can anyone suggest me how to solve the problem?
I found the solution. The below service can serve the purpose.
The put this service in the provider section of module. It will work to format the date after select from datepicker control.