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
JavaScript
(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));