fixed persian date bug persian2Gregorian

master
A1Gard 2 days ago
parent 01071196df
commit eedc1a71e4

@ -58,43 +58,41 @@ class PersianDate {
/**
* from parsi date by mobin ghasem pour
* convert persian date to gregorian
* @param {Array} indate
* @returns {Array}
*/
persian2Gregorian = function (indate) {
let jy = indate[0];
let jm = indate[1];
let jd = indate[2];
let gd;
let j_days_sum_month = [0, 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365];
let g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let g_days_leap_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
gd = j_days_sum_month[parseInt(jm)] + parseInt(jd);
let gy = parseInt(jy) + 621;
if (gd > 286)
gy++;
if (this.isLeapYear(gy - 1) && 286 < gd)
gd--;
if (gd > 286)
gd -= 286;
else
gd += 79;
let gm;
if (this.isLeapYear(gy)) {
for (gm = 0; gd > g_days_leap_month[gm]; gm++) {
gd -= g_days_leap_month[gm];
}
} else {
for (gm = 0; gd > g_days_in_month[gm]; gm++)
gd -= g_days_in_month[gm];
let jy = parseInt(indate[0]);
let jm = parseInt(indate[1]);
let jd = parseInt(indate[2]);
var gy=(jy<=979)?621:1600;
jy-=(jy<=979)?0:979;
var days=(365*jy) +((parseInt(jy/33))*8) +(parseInt(((jy%33)+3)/4))
+78 +jd +((jm<7)?(jm-1)*31:((jm-7)*30)+186);
gy+=400*(parseInt(days/146097));
days%=146097;
if(days > 36524){
gy+=100*(parseInt(--days/36524));
days%=36524;
if(days >= 365)days++;
}
gm++;
if (gm < 10)
gm = '0' + gm;
gd = gd < 10 ? '0'+gd: gd;
return [gy, gm, gd];
};
gy+=4*(parseInt((days)/1461));
days%=1461;
gy+=parseInt((days-1)/365);
if(days > 365)days=(days-1)%365;
var gd=days+1;
var sal_a=[0,31,((gy%4==0 && gy%100!=0) || (gy%400==0))?29:28,31,30,31,30,31,31,30,31,30,31];
var gm
for(gm=0;gm<13;gm++){
var v=sal_a[gm];
if(gd <= v)break;
gd-=v;
}
return [gy,gm,gd];
}
/**

Loading…
Cancel
Save