>FUNCTION jalaliToGregorian(j_y, j_m, j_d) > jy = j_y-979 > jm = j_m-1 > jd = j_d-1 > > j_day_no = 365*jy + div(jy, 33)*8 + div(jy%33+3, 4) > for i=1 TO jm > j_day_no = j_day_no + j_days_in_month[i] > NEXT > > j_day_no = j_day_no + jd > > g_day_no = j_day_no+79 > > gy = 1600 + 400*div(g_day_no, 146097) &&/* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */ > g_day_no = g_day_no % 146097 > > leap = .t. > if (g_day_no >= 36525) &&/* 36525 = 365*100 + 100/4 */ > g_day_no = g_day_no - 1 > gy = gy + 100*div(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 = g_day_no + 1 > else > leap = .f. > ENDIF > ENDIF > > gy = gy + 4*div(g_day_no, 1461) && /* 1461 = 365*4 + 4/4 */ > g_day_no = g_day_no % 1461 > > if (g_day_no >= 366) > leap = .f. > > g_day_no = g_day_no - 1 > gy = gy + div(g_day_no, 365) > g_day_no = g_day_no % 365 > ENDIF > > i = 1 > DO WHILE g_day_no >= (g_days_in_month[i] + IIF(i == 2 AND leap, 1, 0)) > g_day_no = g_day_no - (g_days_in_month[i] + IIF(i == 2 AND leap, 1, 0)) && This is the culprit :-) > i = i + 1 > ENDDO > gm = i > gd = g_day_no+1 > oReturn = CREATEOBJECT([EMPTY]) > ADDPROPERTY(oReturn,[Year], gy) > ADDPROPERTY(oReturn,[Month], gm) > ADDPROPERTY(oReturn,[Day], gd) > >RETURN oReturn >>