> * Jalali, a Gregorian to Jalali and inverse date convertor > * Copyright (C) 2001, 2002 Roozbeh Pournader <roozbeh@farsiweb.info> > * Copyright (C) 2001, 2002 Mohammad Toossi <mohammad@bamdad.org> > * > * This program is free software; you can redistribute it and/or > * modify it under the terms of the GNU Lesser General Public > * License as published by the Free Software Foundation; either > * version 2.1 of the License, or (at your option) any later version. > * > * This program is distributed in the hope that it will be useful, > * but WITHOUT ANY WARRANTY; without even the implied warranty of > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > * Lesser General Public License for more details. > * > * You can receive a copy of GNU Lesser General Public License at the > * World Wide Web address <http://www.gnu.org/licenses/lgpl.html>. > * > * For licensing issues, contact The FarsiWeb Project Group, > * Computing Center, Sharif University of Technology, > * PO Box 11365-8515, Tehran, Iran, or contact us the > * email address <FWPG@sharif.edu>. > */ > >* Changes: > * > * 2002-Feb-19: > * Added PHP header and tailer > * 2002-Jan-28: > * First LGPL release > */ > > > > > >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 > > > >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 >>Not sure at all if this coverts dates right :-)