|
|
@ -0,0 +1,258 @@ |
|
|
|
/** |
|
|
|
* @author Javad Mowlanezhad jmowla@gmail.com |
|
|
|
* @version 1.0.0 |
|
|
|
*/ |
|
|
|
(function($) { |
|
|
|
|
|
|
|
function JalaliCalendar() { |
|
|
|
var _jDIM = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]; |
|
|
|
var _gDIM = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; |
|
|
|
|
|
|
|
/** |
|
|
|
* Checks input parameter for Array object, if the object is Array returns true otherwise false |
|
|
|
* @param a |
|
|
|
*/ |
|
|
|
function _isArray(a) { |
|
|
|
return (a && a.constructor && a.constructor.toString().match(/\Array\(\)/)); |
|
|
|
} |
|
|
|
|
|
|
|
function _div(a, b) { |
|
|
|
return Math.floor(a / b); |
|
|
|
} |
|
|
|
|
|
|
|
function _ds2da(ds) { |
|
|
|
if (_isArray(ds)) |
|
|
|
return ds; |
|
|
|
if (ds == "") |
|
|
|
return []; |
|
|
|
var da = ds.split(" ")[0].split("-"); |
|
|
|
if (da[1] == undefined) |
|
|
|
da = ds.split(" ")[0].split("/"); |
|
|
|
return da; |
|
|
|
} |
|
|
|
|
|
|
|
function _ivda(da) { |
|
|
|
return !(da[0] === "" || da[1] === "" || da[2] === ""); |
|
|
|
} |
|
|
|
|
|
|
|
function _isjvd(d) { |
|
|
|
d = _ds2da(d); |
|
|
|
var j = _g2j(_j2g(d)); |
|
|
|
return d[0] === j[0] && d[1] === j[1] && d[2] === j[2]; |
|
|
|
} |
|
|
|
|
|
|
|
function _isgvd(d) { |
|
|
|
d = _ds2da(d); |
|
|
|
var g = _j2g(_g2j(d)); |
|
|
|
return d[0] === g[0] && d[1] === g[1] && d[2] === g[2]; |
|
|
|
} |
|
|
|
|
|
|
|
function _j2JUL(j) { |
|
|
|
var jy, jm, jd, jdn,i; |
|
|
|
|
|
|
|
jy = j[0] - 979; |
|
|
|
jm = j[1] - 1; |
|
|
|
jd = j[2] - 1; |
|
|
|
jdn = 365 * jy + _div(jy, 33) * 8 + _div((jy % 33 + 3), 4); |
|
|
|
for (i = 0; i < jm; ++i) |
|
|
|
jdn += _jDIM[i]; |
|
|
|
return jdn + jd; |
|
|
|
} |
|
|
|
|
|
|
|
function _JUL2j(gdn) { |
|
|
|
var gy, gm, gd, leap, i; |
|
|
|
|
|
|
|
gy = 1600 + 400 * _div(gdn, 146097); |
|
|
|
gdn = gdn % 146097; |
|
|
|
leap = 1; |
|
|
|
if (gdn >= 36525) { |
|
|
|
gdn--; |
|
|
|
gy += 100 * _div(gdn, 36524); |
|
|
|
gdn = gdn % 36524; |
|
|
|
|
|
|
|
if (gdn >= 365) |
|
|
|
gdn++; |
|
|
|
else |
|
|
|
leap = 0; |
|
|
|
} |
|
|
|
gy += 4 * _div(gdn, 1461); |
|
|
|
gdn %= 1461; |
|
|
|
if (gdn >= 366) { |
|
|
|
leap = 0; |
|
|
|
gdn--; |
|
|
|
gy += _div(gdn, 365); |
|
|
|
gdn = gdn % 365; |
|
|
|
} |
|
|
|
for (i = 0; gdn >= _gDIM[i] + (i == 1 && leap); i++) |
|
|
|
gdn -= _gDIM[i] + (i == 1 && leap); |
|
|
|
gm = i + 1; |
|
|
|
gd = gdn + 1; |
|
|
|
return [gy, gm, gd]; |
|
|
|
} |
|
|
|
|
|
|
|
function _g2JUL(g) { |
|
|
|
var gy, gm, gd, gdn, i; |
|
|
|
|
|
|
|
gy = g[0] - 1600; |
|
|
|
gm = g[1] - 1; |
|
|
|
gd = g[2] - 1; |
|
|
|
gdn = 365 * gy + _div((gy + 3), 4) - _div((gy + 99), 100) + _div((gy + 399), 400); |
|
|
|
for (i = 0; i < gm; ++i) |
|
|
|
gdn += _gDIM[i]; |
|
|
|
if (gm > 1 && ((gy % 4 == 0 && gy % 100 != 0) || (gy % 400 == 0))) |
|
|
|
++gdn; |
|
|
|
return gdn + gd; |
|
|
|
} |
|
|
|
|
|
|
|
function _JUL2g(jdn) { |
|
|
|
var j_np, jy, jm, jd, i; |
|
|
|
|
|
|
|
j_np = _div(jdn, 12053); |
|
|
|
jdn %= 12053; |
|
|
|
|
|
|
|
jy = 979 + 33 * j_np + 4 * _div(jdn, 1461); |
|
|
|
jdn %= 1461; |
|
|
|
if (jdn >= 366) { |
|
|
|
jy += _div((jdn - 1), 365); |
|
|
|
jdn = (jdn - 1) % 365; |
|
|
|
} |
|
|
|
for (i = 0; i < 11 && jdn >= _jDIM[i]; ++i) |
|
|
|
jdn -= _jDIM[i]; |
|
|
|
jm = i + 1; |
|
|
|
jd = jdn + 1; |
|
|
|
return [jy, jm, jd]; |
|
|
|
} |
|
|
|
|
|
|
|
function _j2g(j) { |
|
|
|
j = _ds2da(j); |
|
|
|
if (!_ivda(j)) |
|
|
|
return []; |
|
|
|
return _JUL2j(_j2JUL(j) + 79); |
|
|
|
} |
|
|
|
|
|
|
|
function _g2j(g) { |
|
|
|
g = _ds2da(g); |
|
|
|
if (!_ivda(g)) |
|
|
|
return []; |
|
|
|
return _JUL2g(_g2JUL(g) - 79); |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
gregorianToJalali: function(g) { |
|
|
|
return _g2j(g); |
|
|
|
}, |
|
|
|
gregorianToJalaliStr: function(_g) { |
|
|
|
var g = _ds2da(_g); |
|
|
|
if (!_ivda(g)) |
|
|
|
return ""; |
|
|
|
var j = _g2j(g); |
|
|
|
return j[0] + "/" + (j[1] > 9 ? j[1] : "0" + j[1]) + "/" + (j[2] > 9 ? j[2] : "0" + j[2]); |
|
|
|
}, |
|
|
|
jalaliToGregorianStr: function (_j, _st) { |
|
|
|
var j = _ds2da(_j); |
|
|
|
if (!_ivda(j)) |
|
|
|
return ""; |
|
|
|
var g = _j2g(j); |
|
|
|
return g[0] + "/" + g[1] + "/" + g[2] + (!_st ? "" : " " + _j.split(" ")[1].split(".")[0]); |
|
|
|
}, |
|
|
|
jalaliToGregorian: function(j) { |
|
|
|
return _j2g(j); |
|
|
|
}, |
|
|
|
today: function() { |
|
|
|
var _today = new Date(); |
|
|
|
return this.gregorianToJalaliStr([_today.getFullYear(),(_today.getMonth() + 1),_today.getDate()]); |
|
|
|
}, |
|
|
|
isValidJ: function(d) { |
|
|
|
return _isjvd(d); |
|
|
|
}, |
|
|
|
isValidG: function(d) { |
|
|
|
return _isgvd(d); |
|
|
|
}, |
|
|
|
getDaysInMonth: function(y, m) { |
|
|
|
return 32 - new Date(y, m, 32).getDate(); |
|
|
|
}, |
|
|
|
|
|
|
|
version: "1.0.0" |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
if ($._gDate == undefined) { |
|
|
|
Date.prototype._getFullYear = Date.prototype.getFullYear; |
|
|
|
Date.prototype._setFullYear = Date.prototype.setFullYear; |
|
|
|
Date.prototype._getMonth = Date.prototype.getMonth; |
|
|
|
Date.prototype._setMonth = Date.prototype.setMonth; |
|
|
|
Date.prototype._getDate = Date.prototype.getDate; |
|
|
|
Date.prototype._setDate = Date.prototype.setDate; |
|
|
|
|
|
|
|
Date.prototype._getCJD = function() { |
|
|
|
return $.jalaliCalendar.gregorianToJalali([this._getFullYear(), this._getMonth() + 1, this._getDate()]); |
|
|
|
}; |
|
|
|
|
|
|
|
Date.prototype.getFullYear = function() { |
|
|
|
return this._getCJD()[0]; |
|
|
|
}; |
|
|
|
|
|
|
|
Date.prototype.setFullYear = function(y) { |
|
|
|
var j = this._getCJD(); |
|
|
|
var g = $.jalaliCalendar.jalaliToGregorian([y, j[1], j[2]]); |
|
|
|
this._setDate(1); |
|
|
|
this._setFullYear(g[0]); |
|
|
|
this._setMonth(g[1] - 1); |
|
|
|
this._setDate(g[2]); |
|
|
|
}; |
|
|
|
|
|
|
|
Date.prototype.getMonth = function() { |
|
|
|
return this._getCJD()[1] - 1; |
|
|
|
}; |
|
|
|
|
|
|
|
Date.prototype.setMonth = function(m) { |
|
|
|
var j = this._getCJD(); |
|
|
|
var g = $.jalaliCalendar.jalaliToGregorian([j[0], m + 1, j[2]]); |
|
|
|
this._setDate(1); |
|
|
|
this._setFullYear(g[0]); |
|
|
|
this._setMonth(g[1] - 1); |
|
|
|
this._setDate(g[2]); |
|
|
|
}; |
|
|
|
|
|
|
|
Date.prototype.getDate = function() { |
|
|
|
return this._getCJD()[2]; |
|
|
|
}; |
|
|
|
|
|
|
|
Date.prototype.setDate = function(d) { |
|
|
|
var j = this._getCJD(); |
|
|
|
var g = $.jalaliCalendar.jalaliToGregorian([j[0], j[1], d]); |
|
|
|
this._setDate(1); |
|
|
|
this._setFullYear(g[0]); |
|
|
|
this._setMonth(g[1] - 1); |
|
|
|
this._setDate(g[2]); |
|
|
|
}; |
|
|
|
|
|
|
|
$._gDate = Date; // save original Date object for further reference and use
|
|
|
|
window.Date = function() { |
|
|
|
this.prototype = $._gDate.prototype; |
|
|
|
var _p = [], _al = arguments.length; |
|
|
|
for (var i = 0; i < _al; i++) |
|
|
|
_p.push(arguments[i]); |
|
|
|
var _d = null; |
|
|
|
if (_al == 0) |
|
|
|
_d = new $._gDate(); |
|
|
|
else if (_al == 1) { |
|
|
|
_d = new $._gDate(_p[0]); |
|
|
|
} else if (_al >= 3) { |
|
|
|
_p[1]++; |
|
|
|
var _g = $.jalaliCalendar.jalaliToGregorian(_p); |
|
|
|
for (i = 3; i < _al; i++) |
|
|
|
_g.push(_p[i]); |
|
|
|
for (i = _al; i < 7; i++) |
|
|
|
_g.push(0); |
|
|
|
_d = new $._gDate(_g[0], _g[1] - 1, _g[2], _g[3], _g[4], _g[5], _g[6]); |
|
|
|
} |
|
|
|
return _d; |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
if ($.jalaliCalendar == undefined) { |
|
|
|
$.jalaliCalendar = new JalaliCalendar(); |
|
|
|
window.jalaliCalendar= $.jalaliCalendar; |
|
|
|
} |
|
|
|
})(jQuery); |