UNPKG

ngx-hijri-gregorian-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

70 lines 10.2 kB
import { Injectable } from '@angular/core'; import { NgbDateParserFormatter, NgbDate } from '@ng-bootstrap/ng-bootstrap'; import * as momentjs from 'moment'; const moment = momentjs; import * as moment_ from 'moment-hijri'; const momentHijri = moment_; export class DateFormatterService { constructor(parserFormatter) { this.parserFormatter = parserFormatter; } ToString(date) { const dateStr = this.parserFormatter.format(date); return dateStr; } ToHijriDateStruct(hijriDate, format) { 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, format) { 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) { 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) { 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() { const todayHijri = momentHijri().locale('en').format('iYYYY/iM/iD'); return this.ToHijriDateStruct(todayHijri, 'iYYYY/iM/iD'); } GetTodayGregorian() { const todayGregorian = moment().locale('en').format('YYYY/M/D'); return this.ToGregorianDateStruct(todayGregorian, 'YYYY/M/D'); } } DateFormatterService.decorators = [ { type: Injectable } ]; DateFormatterService.ctorParameters = () => [ { type: NgbDateParserFormatter } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtYXR0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9zcmMvbGliL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL2RhdGUtZm9ybWF0dGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWlCLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVGLE9BQU8sS0FBSyxRQUFRLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUd4QixPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFHNUIsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUFvQixlQUF1QztRQUF2QyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7SUFBSSxDQUFDO0lBRTlELFFBQVEsQ0FBQyxJQUFtQjtRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBaUIsRUFBRSxNQUFjO1FBRWpELE1BQU0sZUFBZSxHQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxzQ0FBc0M7UUFFaEcsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBRTtRQUM3QyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7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akUsQ0FBQzs7O1lBakZKLFVBQVU7OztZQVRhLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiRGF0ZVN0cnVjdCwgTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgTmdiRGF0ZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbmltcG9ydCAqIGFzIG1vbWVudGpzIGZyb20gJ21vbWVudCc7XHJcbmNvbnN0IG1vbWVudCA9IG1vbWVudGpzO1xyXG5cclxuXHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50LWhpanJpJztcclxuY29uc3QgbW9tZW50SGlqcmkgPSBtb21lbnRfO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlclNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcnNlckZvcm1hdHRlcjogTmdiRGF0ZVBhcnNlckZvcm1hdHRlcikgeyB9XHJcblxyXG4gICAgVG9TdHJpbmcoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZGF0ZVN0ciA9IHRoaXMucGFyc2VyRm9ybWF0dGVyLmZvcm1hdChkYXRlKTtcclxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcclxuICAgIH1cclxuXHJcbiAgICBUb0hpanJpRGF0ZVN0cnVjdChoaWpyaURhdGU6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBOZ2JEYXRlICB7XHJcblxyXG4gICAgICBjb25zdCBoaWpyaU1vbWVudERhdGUgPSAgbW9tZW50SGlqcmkoaGlqcmlEYXRlICwgZm9ybWF0KTsgLy8gUGFyc2UgYSBIaWpyaSBkYXRlIGJhc2VkIG9uIGZvcm1hdC5cclxuXHJcbiAgICAgIGNvbnN0IGRheSA9IGhpanJpTW9tZW50RGF0ZS5pRGF0ZSgpO1xyXG4gICAgICBjb25zdCBtb250aCA9ICtoaWpyaU1vbWVudERhdGUuaU1vbnRoKCkgKyAxIDtcclxuICAgICAgY29uc3QgeWVhciA9IGhpanJpTW9tZW50RGF0ZS5pWWVhcigpO1xyXG5cclxuICAgICAgY29uc3QgbmdEYXRlID0gIG5ldyBOZ2JEYXRlKCt5ZWFyLCBtb250aCwgK2RheSk7XHJcbiAgICAgIHJldHVybiBuZ0RhdGU7XHJcbiAgIH1cclxuXHJcblxyXG4gICAgVG9HcmVnb3JpYW5EYXRlU3RydWN0KGdyZWdvcmlhbkRhdGU6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBOZ2JEYXRlIHtcclxuXHJcbiAgICAgIGNvbnN0IG1vbWVudERhdGUgPSBtb21lbnQoZ3JlZ29yaWFuRGF0ZSwgZm9ybWF0KTsgLy8gUGFyc2UgYSBHcmVnb3JpYW4gZGF0ZSBiYXNlZCBvbiBmb3JtYXQuXHJcblxyXG4gICAgICBjb25zdCBkYXkgPSBtb21lbnREYXRlLmRhdGUoKTtcclxuICAgICAgY29uc3QgbW9udGggPSArbW9tZW50RGF0ZS5tb250aCgpICsgMTtcclxuICAgICAgY29uc3QgeWVhciA9IG1vbWVudERhdGUueWVhcigpO1xyXG5cclxuICAgICAgY29uc3QgbmdEYXRlID0gbmV3IE5nYkRhdGUoK3llYXIsICttb250aCwgK2RheSk7XHJcbiAgICAgIHJldHVybiBuZ0RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgVG9IaWpyaShkYXRlOiBOZ2JEYXRlU3RydWN0KTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICAgICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRlU3RyID0gdGhpcy5Ub1N0cmluZyhkYXRlKTtcclxuXHJcbiAgICAgICAgY29uc3QgbW9tZW50RGF0ZSA9IG1vbWVudEhpanJpKGRhdGVTdHIsICdEL00vWVlZWScpO1xyXG5cclxuICAgICAgICBjb25zdCBkYXkgPSBtb21lbnREYXRlLmlEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSArbW9tZW50RGF0ZS5pTW9udGgoKSArIDEgO1xyXG4gICAgICAgIGNvbnN0IHllYXIgPSBtb21lbnREYXRlLmlZZWFyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5nRGF0ZSA9ICBuZXcgTmdiRGF0ZSgreWVhciwgbW9udGgsICtkYXkpO1xyXG4gICAgICAgIHJldHVybiBuZ0RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgVG9HcmVnb3JpYW4oZGF0ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgICAgIGlmICghZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLlRvU3RyaW5nKGRhdGUpO1xyXG5cclxuICAgICAgICBjb25zdCBtb21lbnREYXRlID0gbW9tZW50SGlqcmkoZGF0ZVN0ciwgJ2lEL2lNL2lZWVlZJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRheSA9IG1vbWVudERhdGUubG9jYWxlKCdlbicpLmZvcm1hdCgnRCcpO1xyXG4gICAgICAgIGNvbnN0IG1vbnRoID0gbW9tZW50RGF0ZS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdNJykgO1xyXG4gICAgICAgIGNvbnN0IHllYXIgPSBtb21lbnREYXRlLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ1knKTtcclxuXHJcbiAgICAgICAgY29uc3QgbmdEYXRlID0gIG5ldyBOZ2JEYXRlKCt5ZWFyLCArbW9udGgsICtkYXkpO1xyXG4gICAgICAgIHJldHVybiBuZ0RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgR2V0VG9kYXlIaWpyaSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuXHJcbiAgICAgIGNvbnN0IHRvZGF5SGlqcmkgPSBtb21lbnRIaWpyaSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2lZWVlZL2lNL2lEJyk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5Ub0hpanJpRGF0ZVN0cnVjdCh0b2RheUhpanJpLCAnaVlZWVkvaU0vaUQnKSA7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIEdldFRvZGF5R3JlZ29yaWFuKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG5cclxuICAgICAgY29uc3QgdG9kYXlHcmVnb3JpYW4gPSBtb21lbnQoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdZWVlZL00vRCcpO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuVG9HcmVnb3JpYW5EYXRlU3RydWN0KHRvZGF5R3JlZ29yaWFuLCAnWVlZWS9NL0QnKSA7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==