CLEAR DIMENSION g_days_in_month[12], j_days_in_month[12] g_days_in_month[ 1] = 31 g_days_in_month[ 2] = 28 g_days_in_month[ 3] = 31 g_days_in_month[ 4] = 30 g_days_in_month[ 5] = 31 g_days_in_month[ 6] = 30 g_days_in_month[ 7] = 31 g_days_in_month[ 8] = 31 g_days_in_month[ 9] = 30 g_days_in_month[10] = 31 g_days_in_month[11] = 30 g_days_in_month[12] = 31 j_days_in_month[ 1] = 31 j_days_in_month[ 2] = 31 j_days_in_month[ 3] = 31 j_days_in_month[ 4] = 31 j_days_in_month[ 5] = 31 j_days_in_month[ 6] = 31 j_days_in_month[ 7] = 30 j_days_in_month[ 8] = 30 j_days_in_month[ 9] = 30 j_days_in_month[10] = 30 j_days_in_month[11] = 30 j_days_in_month[12] = 29 j_month_name = ["Farvardin", "Ordibehesht", "Khordad", "Tir", "Mordad", "Shahrivar", "Mehr", "Aban", "Azar", "Dey", "Bahman", "Esfand"] ooo = gregorian_to_jalali(2012, 1, 21) ? ooo.Year, ooo.Month, ooo.Day ooo = jalaliToGregorian( ooo.Year, ooo.Month, ooo.Day) ? ooo.Year, ooo.Month, ooo.Day function div(a, b) return INT(a / b) function gregorian_to_jalali(g_y, g_m, g_d) gy = g_y-1600 gm = g_m-1 gd = g_d-1 g_day_no = 365*gy+div(gy+3,4)-div(gy+99,100)+div(gy+399,400); for i=1 TO gm g_day_no = g_day_no + g_days_in_month[i] NEXT if (gm > 1 AND ((gy%4==0 AND gy%100!=0) OR (gy%400==0))) g_day_no = g_day_no + 1 ENDIF g_day_no = g_day_no + gd j_day_no = g_day_no-79 j_np = div(j_day_no, 12053) j_day_no = j_day_no % 12053 jy = 979+33*j_np+4*div(j_day_no,1461) j_day_no = j_day_no % 1461 if (j_day_no >= 366) jy = jy + div(j_day_no-1, 365) j_day_no = (j_day_no-1)%365 ENDIF for i = 1 TO 11 IF j_day_no >= j_days_in_month[i] j_day_no = j_day_no - j_days_in_month[i] ELSE EXIT ENDIF NEXT jm = i jd = j_day_no+1 oReturn = CREATEOBJECT([EMPTY]) ADDPROPERTY(oReturn,[Year], jy) ADDPROPERTY(oReturn,[Month], jm) ADDPROPERTY(oReturn,[Day], jd) RETURN oReturn ******** 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) 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 oReturnAnd again NOT TESTED!!!!!