Created
July 4, 2016 21:55
-
-
Save farnabaz/eb940bfcb00e68d6e3113e28150efdd8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// jalali date | |
JalaliDate = { | |
month_names: ["فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"], | |
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); | |
g_day_no = g_day_no % 146097; | |
var leap = true; | |
if (g_day_no >= 36525) { | |
g_day_no--; | |
gy += 100 * parseInt(g_day_no / 36524); | |
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); | |
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))) | |
++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]; | |
} | |
Date.prototype.setJalaliFullYear = function(y, m, d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
if (y < 100) y += 1300; | |
j[0] = y; | |
if (m != undefined) { | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m + 1; | |
} | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1] - 1, g[2]); | |
} | |
Date.prototype.setJalaliMonth = function(m, d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m + 1; | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1] - 1, g[2]); | |
} | |
Date.prototype.setJalaliDate = function(d) { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setFullYear(g[0], g[1] - 1, g[2]); | |
} | |
Date.prototype.getJalaliFullYear = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
return j[0]; | |
} | |
Date.prototype.getJalaliMonth = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
return j[1] - 1; | |
} | |
Date.prototype.getJalaliDate = function() { | |
var gd = this.getDate(); | |
var gm = this.getMonth(); | |
var gy = this.getFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
return j[2]; | |
} | |
Date.prototype.getJalaliDay = function() { | |
var day = this.getDay(); | |
day = (day + 1) % 7; | |
return day; | |
} | |
Date.prototype.setJalaliUTCFullYear = function(y, m, d) { | |
var gd = this.getUTCDate(); | |
var gm = this.getUTCMonth(); | |
var gy = this.getUTCFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
if (y < 100) y += 1300; | |
j[0] = y; | |
if (m != undefined) { | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m + 1; | |
} | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setUTCFullYear(g[0], g[1] - 1, g[2]); | |
} | |
Date.prototype.setJalaliUTCMonth = function(m, d) { | |
var gd = this.getUTCDate(); | |
var gm = this.getUTCMonth(); | |
var gy = this.getUTCFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
if (m > 11) { | |
j[0] += Math.floor(m / 12); | |
m = m % 12; | |
} | |
j[1] = m + 1; | |
if (d != undefined) j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setUTCFullYear(g[0], g[1] - 1, g[2]); | |
} | |
Date.prototype.setJalaliUTCDate = function(d) { | |
var gd = this.getUTCDate(); | |
var gm = this.getUTCMonth(); | |
var gy = this.getUTCFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
j[2] = d; | |
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]); | |
return this.setUTCFullYear(g[0], g[1] - 1, g[2]); | |
} | |
Date.prototype.getJalaliUTCFullYear = function() { | |
var gd = this.getUTCDate(); | |
var gm = this.getUTCMonth(); | |
var gy = this.getUTCFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
return j[0]; | |
} | |
Date.prototype.getJalaliUTCMonth = function() { | |
var gd = this.getUTCDate(); | |
var gm = this.getUTCMonth(); | |
var gy = this.getUTCFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
return j[1] - 1; | |
} | |
Date.prototype.getJalaliUTCDate = function() { | |
var gd = this.getUTCDate(); | |
var gm = this.getUTCMonth(); | |
var gy = this.getUTCFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
return j[2]; | |
} | |
Date.prototype.getJalaliUTCDay = function() { | |
var day = this.getUTCDay(); | |
day = (day + 1) % 7; | |
return day; | |
} | |
Date.prototype.getJalaliTime = function() { | |
var gd = this.getUTCDate(); | |
var gm = this.getUTCMonth(); | |
var gy = this.getUTCFullYear(); | |
var j = JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
return { | |
year: j[0], | |
month: j[1], | |
day: j[2] | |
}; | |
} | |
JalaliDate.dateToJalali = function(date) { | |
var gd = date.getUTCDate(); | |
var gm = date.getUTCMonth(); | |
var gy = date.getUTCFullYear(); | |
return JalaliDate.gregorianToJalali(gy, gm + 1, gd); | |
} | |
Date.prototype.getJalaliMonthName = function() { | |
return JalaliDate.month_names[this.getJalaliMonth()]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
بسیار ممنون از اینکه این کد رو اینجا کپی کردی چون نسخه ی اصلیش رو تو اینترنت هرچی گشتم پیدا نکردم.
فقط بهتر بود License و اطلاعات Developer های اصلی رو ازش بر نمی داشتی