UNPKG

acha-framework

Version:

is a modular framework on both client (angular.js) and server (node.js) side, it provides security, orm, ioc, obfuscation and ...

172 lines 4.86 kB
(function (window, undefined) { 'use strict'; function intPart(floatNum) { if (floatNum < -1e-7) { return Math.ceil(floatNum - 1e-7); } return Math.floor(floatNum + 1e-7); } var delta = 1; function gregorian_to_hijri(year, month, day) { var d = parseInt(day); var m = parseInt(month); var y = parseInt(year); var jd, l, jd1, n, j, delta = 1; if (y > 1582 || y === 1582 && m > 10 || y === 1582 && m === 10 && d > 14) { //added delta=1 on jd to comply isna rulling 2007 jd = intPart(1461 * (y + 4800 + intPart((m - 14) / 12)) / 4) + intPart(367 * (m - 2 - 12 * intPart((m - 14) / 12)) / 12) - intPart(3 * intPart((y + 4900 + intPart((m - 14) / 12)) / 100) / 4) + d - 32075 + delta; } else { //added +1 on jd to comply isna rulling jd = 367 * y - intPart(7 * (y + 5001 + intPart((m - 9) / 7)) / 4) + intPart(275 * m / 9) + d + 1729777 + delta; } //added -1 on jd1 to comply isna rulling jd1 = jd - delta; l = jd - 1948440 + 10632; n = intPart((l - 1) / 10631); l = l - 10631 * n + 354; j = intPart((10985 - l) / 5316) * intPart(50 * l / 17719) + intPart(l / 5670) * intPart(43 * l / 15238); l = l - intPart((30 - j) / 15) * intPart(17719 * j / 50) - intPart(j / 16) * intPart(15238 * j / 43) + 29; m = intPart(24 * l / 709); d = l - intPart(709 * m / 24); y = 30 * n + j - 30; return { day: d, month: m, year: y }; } function hijri_to_gregorian(year, month, day) { var d = parseInt(day); var m = parseInt(month); var y = parseInt(year); //added - delta=1 on jd to comply isna rulling var jd = intPart((11 * y + 3) / 30) + 354 * y + 30 * m - intPart((m - 1) / 2) + d + 1948440 - 385 - delta; var l, n, i, j, k; if (jd > 2299160) { l = jd + 68569; n = intPart(4 * l / 146097); l = l - intPart((146097 * n + 3) / 4); i = intPart(4000 * (l + 1) / 1461001); l = l - intPart(1461 * i / 4) + 31; j = intPart(80 * l / 2447); d = l - intPart(2447 * j / 80); l = intPart(j / 11); m = j + 2 - 12 * l; y = 100 * (n - 49) + i + l; } else { j = jd + 1402; k = intPart((j - 1) / 1461); l = j - 1461 * k; n = intPart((l - 1) / 365) - intPart(l / 1461); i = l - 365 * n + 30; j = intPart(80 * i / 2447); d = i - intPart(2447 * j / 80); i = intPart(j / 11); m = j + 2 - 12 * i; y = 4 * k + n + i - 4716; } return { day: d, month: m, year: y }; } var fromDate = function (date) { date = new Date(date); return gregorian_to_hijri(date.getFullYear(), date.getMonth() + 1, date.getDate()); }; var toDate = function (year, month, day) { var res = hijri_to_gregorian(year, month, day); return new Date(res.year, res.month - 1, res.day); }; var HijriCalendar = function (dateOrYear, month, day) { if (!dateOrYear) { dateOrYear = new Date(); } if (Date.isDate(dateOrYear)) { var calc = fromDate(dateOrYear); this.year = calc.year; this.month = calc.month; this.day = calc.day; return; } this.year = dateOrYear; this.month = month; this.day = day; }; HijriCalendar.prototype.getMonthStartWeekDate = function () { return HijriCalendar.getMonthStartWeekDate(this.year, this.month); }; HijriCalendar.prototype.toDate = function () { return toDate(this.year, this.month, this.day); }; HijriCalendar.toGregorian = function (year, month, day) { var date = toDate(year, month, day); return new GregorianCalendar(date); }; HijriCalendar.getMonthStartWeekDate = function (year, month) { return toDate(year, month, 1).getDay() + HijriCalendar.weekGap; }; HijriCalendar.weekGap = 0; HijriCalendar.daysInMonth = [ 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29 ]; HijriCalendar.dayNames = [ 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت', 'الأحد' ]; HijriCalendar.dayNamesShort = [ 'إث', 'ثل', 'أر', 'خم', 'جم', 'سب', 'أح' ]; HijriCalendar.monthNames = [ 'مُحَرَّم', 'صَفَر', 'رَبيع الأوّل', 'رَبيع الثاني', 'جُمادى الأولى', 'جُمادى الآخرة', 'رَجَب', 'شَعْبان', 'رَمَضان', 'شَوّال', 'ذو القعدة', 'ذو الحجة' ]; HijriCalendar.monthNamesShort = [ 'مُحَر', 'صَفَر', 'رَبي', 'ثان', 'أول', 'آخر', 'رَجَب', 'شَعْب', 'رَمَض', 'شَوّا', 'قعد', 'حجة' ]; window.HijriCalendar = HijriCalendar; }(window));