ng-gregorian-hijri-datepicker
Version:
* Lightweight **Angular** datepicker based on [ng-bootstrap](https://ng-bootstrap.github.io/#/components/datepicker/overview) that supports **Gregorian** and **Hijri** calendars. * Provides ability to swap between **Gregorian** and **Hijri** calendars *
91 lines (60 loc) • 2.52 kB
text/typescript
import { Injectable } from '@angular/core';
import { NgbDateStruct, NgbDateParserFormatter, NgbDate } from '@ng-bootstrap/ng-bootstrap';
import moment from 'moment';
import momentHijri from 'moment-hijri';
@Injectable()
export class DateFormatterService {
constructor(private parserFormatter: NgbDateParserFormatter) { }
ToString(date: NgbDateStruct): string {
const dateStr = this.parserFormatter.format(date);
return dateStr;
}
ToHijriDateStruct(hijriDate: string, format: string): NgbDate {
const hijriMomentDate = momentHijri(hijriDate , format); // Parse a Hijri date based on format.
const day = hijriMomentDate.iDate();
const month = +hijriMomentDate.iMonth() + 1 ;
const year = hijriMomentDate.iYear();
const ngDate = new NgbDate(+year, month, +day);
return ngDate;
}
ToGregorianDateStruct(gregorianDate: string, format: string): NgbDate {
const momentDate = moment(gregorianDate, format); // Parse a Gregorian date based on format.
const day = momentDate.date();
const month = +momentDate.month() + 1;
const year = momentDate.year();
const ngDate = new NgbDate(+year, +month, +day);
return ngDate;
}
ToHijri(date: NgbDateStruct): NgbDateStruct {
if (!date) {
return null;
}
const dateStr = this.ToString(date);
const momentDate = momentHijri(dateStr, 'D/M/YYYY');
const day = momentDate.iDate();
const month = +momentDate.iMonth() + 1 ;
const year = momentDate.iYear();
const ngDate = new NgbDate(+year, month, +day);
return ngDate;
}
ToGregorian(date: NgbDateStruct) {
if (!date) {
return null;
}
const dateStr = this.ToString(date);
const momentDate = momentHijri(dateStr, 'iD/iM/iYYYY');
const day = momentDate.locale('en').format('D');
const month = momentDate.locale('en').format('M') ;
const year = momentDate.locale('en').format('Y');
const ngDate = new NgbDate(+year, +month, +day);
return ngDate;
}
GetTodayHijri(): NgbDateStruct {
const todayHijri = momentHijri().locale('en').format('iYYYY/iM/iD');
return this.ToHijriDateStruct(todayHijri, 'iYYYY/iM/iD') ;
}
GetTodayGregorian(): NgbDateStruct {
const todayGregorian = moment().locale('en').format('YYYY/M/D');
return this.ToGregorianDateStruct(todayGregorian, 'YYYY/M/D') ;
}
}