acha-framework
Version:
is a modular framework on both client (angular.js) and server (node.js) side, it provides security, orm, ioc, obfuscation and ...
223 lines • 5.41 kB
JavaScript
(function (window, undefined) {
'use strict';
var JalaliDate = {
g_days_in_month: [
31,
28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
],
j_days_in_month: [
31,
31,
31,
31,
31,
31,
30,
30,
30,
30,
30,
29
]
};
JalaliDate.jalaliToGregorian = function (j_y, j_m, j_d) {
j_y = parseInt(j_y);
j_m = parseInt(j_m);
j_d = parseInt(j_d);
var jy = j_y - 979;
var jm = j_m - 1;
var jd = j_d - 1;
var j_day_no = 365 * jy + parseInt(jy / 33) * 8 + parseInt((jy % 33 + 3) / 4);
for (var i = 0; i < jm; ++i)
j_day_no += JalaliDate.j_days_in_month[i];
j_day_no += jd;
var g_day_no = j_day_no + 79;
var gy = 1600 + 400 * parseInt(g_day_no / 146097);
/* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
g_day_no = g_day_no % 146097;
var leap = true;
if (g_day_no >= 36525)
/* 36525 = 365*100 + 100/4 */
{
g_day_no--;
gy += 100 * parseInt(g_day_no / 36524);
/* 36524 = 365*100 + 100/4 - 100/100 */
g_day_no = g_day_no % 36524;
if (g_day_no >= 365)
g_day_no++;
else
leap = false;
}
gy += 4 * parseInt(g_day_no / 1461);
/* 1461 = 365*4 + 4/4 */
g_day_no %= 1461;
if (g_day_no >= 366) {
leap = false;
g_day_no--;
gy += parseInt(g_day_no / 365);
g_day_no = g_day_no % 365;
}
for (var i = 0; g_day_no >= JalaliDate.g_days_in_month[i] + (i === 1 && leap); i++)
g_day_no -= JalaliDate.g_days_in_month[i] + (i === 1 && leap);
var gm = i + 1;
var gd = g_day_no + 1;
return [
gy,
gm,
gd
];
};
JalaliDate.checkDate = function (j_y, j_m, j_d) {
return !(j_y < 0 || j_y > 32767 || j_m < 1 || j_m > 12 || j_d < 1 || j_d > JalaliDate.j_days_in_month[j_m - 1] + (j_m === 12 && !((j_y - 979) % 33 % 4)));
};
JalaliDate.gregorianToJalali = function (g_y, g_m, g_d) {
g_y = parseInt(g_y);
g_m = parseInt(g_m);
g_d = parseInt(g_d);
var gy = g_y - 1600;
var gm = g_m - 1;
var gd = g_d - 1;
var g_day_no = 365 * gy + parseInt((gy + 3) / 4) - parseInt((gy + 99) / 100) + parseInt((gy + 399) / 400);
for (var i = 0; i < gm; ++i)
g_day_no += JalaliDate.g_days_in_month[i];
if (gm > 1 && (gy % 4 === 0 && gy % 100 !== 0 || gy % 400 === 0))
/* leap and after Feb */
++g_day_no;
g_day_no += gd;
var j_day_no = g_day_no - 79;
var j_np = parseInt(j_day_no / 12053);
j_day_no %= 12053;
var jy = 979 + 33 * j_np + 4 * parseInt(j_day_no / 1461);
j_day_no %= 1461;
if (j_day_no >= 366) {
jy += parseInt((j_day_no - 1) / 365);
j_day_no = (j_day_no - 1) % 365;
}
for (var i = 0; i < 11 && j_day_no >= JalaliDate.j_days_in_month[i]; ++i) {
j_day_no -= JalaliDate.j_days_in_month[i];
}
var jm = i + 1;
var jd = j_day_no + 1;
return [
jy,
jm,
jd
];
};
var fromDate = function (date) {
date = new Date(date);
var res = JalaliDate.gregorianToJalali(date.getFullYear(), date.getMonth() + 1, date.getDate());
return {
year: res[0],
month: res[1],
day: res[2]
};
};
var toDate = function (year, month, day) {
var res = JalaliDate.jalaliToGregorian(year, month, day);
return new Date(res[0], res[1] - 1, res[2]);
};
var PersianCalendar = 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;
};
PersianCalendar.prototype.getMonthStartWeekDate = function () {
return PersianCalendar.getMonthStartWeekDate(this.year, this.month);
};
PersianCalendar.prototype.toDate = function () {
return toDate(this.year, this.month, this.day);
};
PersianCalendar.toGregorian = function () {
var date = toDate(this.year, this.month, this.day);
return new GregorianCalendar(date);
};
PersianCalendar.getMonthStartWeekDate = function (year, month) {
var date = toDate(year, month, 1).getDay() + PersianCalendar.weekGap;
if (date > 7)
date -= 7;
return date;
};
PersianCalendar.weekGap = 2;
PersianCalendar.daysInMonth = [
31,
31,
31,
31,
31,
31,
30,
30,
30,
30,
30,
29
];
PersianCalendar.dayNames = [
'شنبه',
'یک شنبه',
'دوشنبه',
'سه شنبه',
'چهار شنبه',
'پنج شنبه',
'جمعه'
];
PersianCalendar.dayNamesShort = [
'ش',
'۱ش',
'۲ش',
'۳ش',
'۴ش',
'۵ش',
'ج'
];
PersianCalendar.monthNames = [
'فروردین',
'اردیبهشت',
'خرداد',
'تیر',
'مرداد',
'شهریور',
'مهر',
'آبان',
'آذر',
'دی',
'بهمن',
'اسفند'
];
PersianCalendar.monthNamesShort = [
'فر',
'ارد',
'خرد',
'تیر',
'مرد',
'شهر',
'مهر',
'آب',
'آذر',
'دی',
'بهم',
'اسف'
];
window.PersianCalendar = PersianCalendar;
}(window));