تبديل تاريخ ميلادي به شمسي در php

naeim_crack

Active Member
سلام من اين كد رو يادم نيست از كجا آوردم ولي اينجوريه
کد:
<?php

function jdate($type,$maket="now")
{
	//set 1 if you want translate number to farsi or if you don't like set 0
	$transnumber=1;
	///chosse your timezone
	$TZhours=0;
	$TZminute=0;

	if($maket=="now"){
		$year=date("Y");
		$month=date("m");
		$day=date("d");
		list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
		$maket=jmaketime(date("h")+$TZhours,date("i")+$TZminute,date("s"),$jmonth,$jday,$jyear);
	}else{
		$maket+=$TZhours*3600+$TZminute*60;
		$date=date("Y-m-d",maket);
		list( $year, $month, $day ) = preg_split ( '/-/', $date );

		list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
		}

	$need= $maket;
	$year=date("Y",$need);
	$month=date("m",$need);
	$day=date("d",$need);
	$i=0;
	while($i<strlen($type))
	{
		$subtype=substr($type,$i,1);
		switch ($subtype)
		{

			case "A":
				$result1=date("a",$need);
				if($result1=="pm") $result.= "بعدازظهر";
				else $result.="قبل‏ازظهر";
				break;

			case "a":
				$result1=date("a",$need);
				if($result1=="pm") $result.= "ب.ظ";
				else $result.="ق.ظ";
				break;
			case "d":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
				if($jday<10)$result1="0".$jday;
				else 	$result1=$jday;
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "D":
				$result1=date("D",$need);
				if($result1=="Thu") $result1="پ";
				else if($result1=="Sat") $result1="ش";
				else if($result1=="Sun") $result1="ى";
				else if($result1=="Mon") $result1="د";
				else if($result1=="Tue") $result1="س";
				else if($result1=="Wed") $result1="چ";
				else if($result1=="Thu") $result1="پ";
				else if($result1=="Fri") $result1="ج";
				$result.=$result1;
				break;
			case"F":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
				$result.=monthname($jmonth);
				break;
			case "g":
				$result1=date("g",$need);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "G":
				$result1=date("G",$need);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
				case "h":
				$result1=date("h",$need);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "H":
				$result1=date("H",$need);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "i":
				$result1=date("i",$need);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "j":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
				$result1=$jday;
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "l":
				$result1=date("l",$need);
				if($result1=="Saturday") $result1="شنبه";
				else if($result1=="Sunday") $result1="يكشنبه";
				else if($result1=="Monday") $result1="دوشنبه";
				else if($result1=="Tuesday") $result1="سه شنبه";
				else if($result1=="Wednesday") $result1="چهارشنبه";
				else if($result1=="Thursday") $result1="پنجشنبه";
				else if($result1=="Friday") $result1="جمعه";
				$result.=$result1;
				break;
			case "m":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
				if($jmonth<10) $result1="0".$jmonth;
				else	$result1=$jmonth;
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "M":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
				$result.=monthname($jmonth);
				break;
			case "n":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);	
				$result1=$jmonth;
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "s":
				$result1=date("s",$need);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "S":
				$result.="ام";
				break;
			case "t":
				$result.=lastday ($month,$day,$year);
				break;
			case "w":
				$result1=date("w",$need);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "y":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);	
				$result1=substr($jyear,2,4);
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;
			case "Y":
				list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
				$result1=$jyear;
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
				else $result.=$result1;
				break;		
			default:
				$result.=$subtype;
		}
	$i++;
	}
	return $result;
}



function jmaketime($hour,$minute,$second,$jmonth,$jday,$jyear)
{
	list( $year, $month, $day ) = jalali_to_gregorian($jyear, $jmonth, $jday);
	$i=mktime($hour,$minute,$second,$month,$day,$year);	
	return $i;
}


///Find Day Begining Of Month
function mstart($month,$day,$year)
{
	list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
	list( $year, $month, $day ) = jalali_to_gregorian($jyear, $jmonth, "1");
	$timestamp=mktime(0,0,0,$month,$day,$year);
	return date("w",$timestamp);
}

//Find Number Of Days In This Month
function lastday ($month,$day,$year)
{
	$lastdayen=date("d",mktime(0,0,0,$month+1,0,$year));
	list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
	$lastdatep=$jday;
	$jday=$jday2;
	while($jday2!="1")
	{
		if($day<$lastdayen)
		{
			$day++;
			list( $jyear, $jmonth, $jday2 ) = gregorian_to_jalali($year, $month, $day);
			if($jdate2=="1") break;
			if($jdate2!="1") $lastdatep++;
		}
		else
		{ 
			$day=0;
			$month++;
			if($month==13) 
			{
					$month="1";
					$year++;
			}
		}

	}
	return $lastdatep-1;
}

//translate number of month to name of month
function monthname($month)
{

    if($month=="01") return "فروردين";

    if($month=="02") return "ارديبهشت";

    if($month=="03") return "خرداد";

    if($month=="04") return  "تير";

    if($month=="05") return "مرداد";

    if($month=="06") return "شهريور";

    if($month=="07") return "مهر";

    if($month=="08") return "آبان";

    if($month=="09") return "آذر";

    if($month=="10") return "دي";

    if($month=="11") return "بهمن";

    if($month=="12") return "اسفند";
}

////here convert to  number in persian
function Convertnumber2farsi($srting) 
{
	$num0="۰";
	$num1="۱";
	$num2="۲";
	$num3="۳";
	$num4="۴";
	$num5="۵";
	$num6="۶";
	$num7="۷";
	$num8="۸";
	$num9="۹";
	
	$stringtemp="";
	$len=strlen($srting);
	for($sub=0;$sub<$len;$sub++)
	{
	 if(substr($srting,$sub,1)=="0")$stringtemp.=$num0;
	 elseif(substr($srting,$sub,1)=="1")$stringtemp.=$num1;
	 elseif(substr($srting,$sub,1)=="2")$stringtemp.=$num2;
	 elseif(substr($srting,$sub,1)=="3")$stringtemp.=$num3;
	 elseif(substr($srting,$sub,1)=="4")$stringtemp.=$num4;
	 elseif(substr($srting,$sub,1)=="5")$stringtemp.=$num5;
	 elseif(substr($srting,$sub,1)=="6")$stringtemp.=$num6;
	 elseif(substr($srting,$sub,1)=="7")$stringtemp.=$num7;
	 elseif(substr($srting,$sub,1)=="8")$stringtemp.=$num8;
	 elseif(substr($srting,$sub,1)=="9")$stringtemp.=$num9;
	 else $stringtemp.=substr($srting,$sub,1);

	}
return   $stringtemp;

}///end conver to number in persian





// "jalali.php" is convertor to and from Gregorian and Jalali calendars. 
// Copyright (C) 2000  Roozbeh Pournader and Mohammad Toossi 
// 
// This program is free software; you can redistribute it and/or 
// modify it under the terms of the GNU General Public License 
// as published by the Free Software Foundation; either version 2 
// 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 General Public License for more details. 
// 
// A copy of the GNU General Public License is available from: 
// 
//    <a href="http://www.gnu.org/copyleft/gpl.html" target="_blank">http://www.gnu.org/copyleft/gpl.html</a> 
// 


function div($a,$b) {
    return (int) ($a / $b);
}

function gregorian_to_jalali ($g_y, $g_m, $g_d) 
{
    $g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
    $j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);     
    


   

   $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=0; $i < $gm; ++$i) 
      $g_day_no += $g_days_in_month[$i]; 
   if ($gm>1 && (($gy%4==0 && $gy%100!=0) || ($gy%400==0))) 
      /* leap and after Feb */ 
      $g_day_no++; 
   $g_day_no += $gd; 

   $j_day_no = $g_day_no-79; 

   $j_np = div($j_day_no, 12053); /* 12053 = 365*33 + 32/4 */ 
   $j_day_no = $j_day_no % 12053; 

   $jy = 979+33*$j_np+4*div($j_day_no,1461); /* 1461 = 365*4 + 4/4 */ 

   $j_day_no %= 1461; 

   if ($j_day_no >= 366) { 
      $jy += div($j_day_no-1, 365); 
      $j_day_no = ($j_day_no-1)%365; 
   } 

   for ($i = 0; $i < 11 && $j_day_no >= $j_days_in_month[$i]; ++$i) 
      $j_day_no -= $j_days_in_month[$i]; 
   $jm = $i+1; 
   $jd = $j_day_no+1; 

   return array($jy, $jm, $jd); 
} 

function jalali_to_gregorian($j_y, $j_m, $j_d) 
{ 
    $g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
    $j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
    
   

   $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=0; $i < $jm; ++$i) 
      $j_day_no += $j_days_in_month[$i]; 

   $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 = true; 
   if ($g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */ 
   { 
      $g_day_no--; 
      $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++; 
      else 
         $leap = false; 
   } 

   $gy += 4*div($g_day_no, 1461); /* 1461 = 365*4 + 4/4 */ 
   $g_day_no %= 1461; 

   if ($g_day_no >= 366) { 
      $leap = false; 

      $g_day_no--; 
      $gy += div($g_day_no, 365); 
      $g_day_no = $g_day_no % 365; 
   } 

   for ($i = 0; $g_day_no >= $g_days_in_month[$i] + ($i == 1 && $leap); $i++) 
      $g_day_no -= $g_days_in_month[$i] + ($i == 1 && $leap); 
   $gm = $i+1; 
   $gd = $g_day_no+1; 

   return array($gy, $gm, $gd); 
}





?>

اينجوري هم استفاده ميشه
کد:
<?php require_once"jdf.php" ?> 
<?php
echo jdate("Y/m/d");
?>
حالا وقتي اين كد رو اجرا مي كني تاريخ رو تبديل مي كنه اما يه پيغام خضا هم ميده به اين شكل
کد:
Notice: Undefined variable: result in c:\program files\easyphp1-7\www\fa\jdf.php on line 174
۸۳/۰۷/۲۸
نمي دونم اشكال از كجاست
حالا اگه جري ديگه ميشه تاريخ رو تبديل كرد بگيد البته تو php
مرسي
 

oxygenws

Active Member
۱- این برنامه مال گروه farsiweb.info می باشد.
۲- اشکال Notice معمولا مهم نیست.
۳- اشکال Undefined Variable معمولا به هیچ عنوان مهم نیست!!!
۴- خط ۱۷۴ رو ببین (من حوصله ندارم ۱۷۴ تا بشمارم، خودت زحمتش رو بکش). در حالتی این اتفاق میافته که متغیری استفاده بشه ولی قبلا تعریف اولیه نشده باشه. مثلا متغیری تعریف نشده در عملگر های مقایسه استفاده بشه یا متغیر تعریف نشده ای در سمت راست مساوی قرار بگیره.

موفق باشید، امید
 

naeim_crack

Active Member
سلام
1- شرمنده اين برنامه به اين گروه مربوط ميشه http://jdf.farsiprojects.com
2- اينم خط 174 كلي شمردم
کد:
				if($transnumber==1) $result.=Convertnumber2farsi($result1);
در هر صورت مشگل مشگله فعلا نميشه از اين استفاده كرد يه دونه درسشو نداري
مرسي
 

oxygenws

Active Member
۱- ظاهرا توسعه ای از برنامه farsiweb.info هستش. بهتره از خود برنامه اصلی در آدرس زیر استفاده کنی:
http://www.farsiweb.info/jalali/jalali.phps

۲- عملگر .= باعث می شه که مقدار result هم در سمت چپ مساوی باشه و هم در سمت راست. اون بخشی اش که سمت راست هستش مشکل درست می کنه.

موفق باشید، امید
 

Mikhak

Active Member
آقا منم يكي نوشتم
کد:
."<script type=\"text/javascript\">\n\n"
  		."function showdate() { "
		."week= new Array(\"يكشنبه\",\"دوشنبه\",\"سه شنبه\",\"چهارشنبه\",\"پنج شنبه\",\"جمعه\",\"شنبه\"); "
		."months = new Array(\"فروردين\",\"ارديبهشت\",\"خرداد\",\"تير\",\"مرداد\",\"شهريور\",\"مهر\",\"آبان\",\"آذر\",\"دي\",\"بهمن\",\"اسفند\");" 
		."a = new Date(); "
		."d= a.getDay(); "
		."day= a.getDate(); "
		."month = a.getMonth()+1; "
		."year= a.getYear(); "
		."year = (year== 0)?2000:year; "
		."(year<1000)? (year += 2000):true; "
		
		."year -= ( (month < 3) || ((month == 3) && (day < 21)) )? 622:621; "
		."switch (month) { "
		."case 1: (day<21)? (month=10, day+=10):(month=11, day-=20); break; "
		."case 2: (day<20)? (month=11, day+=11):(month=12, day-=19); break; "
		."case 3: (day<21)? (month=12, day+=9):(month=1, day-=20); break; "
		."case 4: (day<21)? (month=1, day+=11):(month=2, day-=20); break; "
		."case 5: "
		."case 6: (day<22)? (month-=3, day+=10):(month-=2, day-=21); break; "
		."case 7: "
		."case 8: "
		."case 9: (day<23)? (month-=3, day+=9):(month-=2, day-=22); break;" 
		."case 10:(day<23)? (month=7, day+=8):(month=8, day-=22); break; "
		."case 11: "
		."case 12:(day<22)? (month-=3, day+=9):(month-=2, day-=21); break; "
		."default: break;" 
		."}"
		
		."y1=0;while(year>1000){year=year-1000;y1++;}"
		."y2=0;while(year>100){year=year-100;y2++;}"
		."y3=0;while(year>10){year=year-10;y3++;}"
		."switch (y1) { "
		."case 1: y1=\"۱\"; break;"
		."case 2: y1=\"۲\"; break;"
		."case 3: y1=\"۳\"; break;"
		."case 4: y1=\"۴\"; break;"
		."case 5: y1=\"۵\"; break;"
		."case 6: y1=\"۶\"; break;"
		."case 7: y1=\"۷\"; break;"
		."case 8: y1=\"۸\"; break;"
		."case 9: y1=\"۹\"; break;"
		."default: break; "
		."}"
		."switch (y2) { "
		."case 1: y2=\"۱\"; break;"
		."case 2: y2=\"۲\"; break;"
		."case 3: y2=\"۳\"; break;"
		."case 4: y2=\"۴\"; break;"
		."case 5: y2=\"۵\"; break;"
		."case 6: y2=\"۶\"; break;"
		."case 7: y2=\"۷\"; break;"
		."case 8: y2=\"۸\"; break;"
		."case 9: y2=\"۹\"; break;"
		."default: break;"
		." }"
		."switch (y3) { "
		."case 1: y3=\"۱\"; break;"
		."case 2: y3=\"۲\"; break;"
		."case 3: y3=\"۳\"; break;"
		."case 4: y3=\"۴\"; break;"
		."case 5: y3=\"۵\"; break;"
		."case 6: y3=\"۶\"; break;"
		."case 7: y3=\"۷\"; break;"
		."case 8: y3=\"۸\"; break;"
		."case 9: y3=\"۹\"; break;"
		."default: break;"
		." }"
		."switch (year) { "
		."case 1: year=\"۱\"; break;"
		."case 2: year=\"۲\"; break;"
		."case 3: year=\"۳\"; break;"
		."case 4: year=\"۴\"; break;"
		."case 5: year=\"۵\"; break;"
		."case 6: year=\"۶\"; break;"
		."case 7: year=\"۷\"; break;"
		."case 8: year=\"۸\"; break;"
		."case 9: year=\"۹\"; break;"
		."default: break; "
		."}"
		."d1=0;while(day>10){day=day-10;d1++;}"
		."switch (d1) { "
		."case 1: d1=\"۱\"; break;"
		."case 2: d1=\"۲\"; break;"
		."case 3: d1=\"۳\"; break;"
		."case 4: d1=\"۴\"; break;"
		."case 5: d1=\"۵\"; break;"
		."case 6: d1=\"۶\"; break;"
		."case 7: d1=\"۷\"; break;"
		."case 8: d1=\"۸\"; break;"
		."case 9: d1=\"۹\"; break;"
		."default: break; "
		."}"
		."switch (day) { "
		."case 1: day=\"۱\"; break;"
		."case 2: day=\"۲\"; break;"
		."case 3: day=\"۳\"; break;"
		."case 4: day=\"۴\"; break;"
		."case 5: day=\"۵\"; break;"
		."case 6: day=\"۶\"; break;"
		."case 7: day=\"۷\"; break;"
		."case 8: day=\"۸\"; break;"
		."case 9: day=\"۹\"; break;"
		."default: break; "
		."}"
		 
		."document.write(\" \"+week[d]+\" \"+d1,day+\" \"+months[month-1]+\" \"+ y1,y2,y3,year); "
		."}"
		."</script>"

طريقه استفادشم كه اينه
کد:
."<script>showdate()</script>"
------------------
سينا
 

Mikhak

Active Member
عزيزه دل چون من اينو واسه فارسي كردن تم ها درست كرده بودم اينو واسه ي تبديل تاريخ تمهايي نوشتم كه توي تمشون headr.htm نداشتن و فقط header.php داشتن عين اين كد رو هم با جاوا واسه ي تم هايي كه header.htm داشتن نوشتم ولي كد بالايي هم اشكالي نداره درست كار ميكنه فقط كلمه هايي كه فارسي نوشته رو يونيكد كرده بودم كه اينجا تبديل به فارسي شدن
---------------------
سينا
 

naeim_crack

Active Member
سلام
مرسي شرمنده شايد من يه مقدار دير مي گيرم الان اينو داخل
کد:
<?php

اينجا هم كد شما رو بزارم 
?>

اينجوري بايد ازش استفداه كنم

ميشه يه توضيح بدي مرسي
 

miladmovie

Active Member
سلام همون طور كه oxygenws گفت و توي اينجا(http://jdf.farsiprojects.com) نوشته من اين برنامه رو از IranPHP و به طور دقيق تر از اينجا(http://www.farsiweb.info/jalali/jalali.phps) گرفتم و توسعش دادم

در مورد اون اروري كه گفتي مشكلي نيست! از تنظيمات PHP تو است و وقتي مي ره توي اينترنت مشكلش حل مي شه(من كه تا به حال توي سرور چنين مشكلي نداشتم) ولي اگر خيلي اصرار داري كه مشكلت حل به شه اوله تابع jdate اين كد رو بنويس :
کد:
$result="";

جديدا اين farsiweb كدش رو يكمي userfriendly تر كرده!
 

oxygenws

Active Member
لازمه به نکات میلاد عزیز اضافه کنم که: نعیم به تنظیمات خودت دست نزن، برنامه ای خیلی خوب و درست هستش که همین notice ها رو نداشته باشه. (لازمه بگم که مثلا php-nuke در صورتی که notice هاش رو ببینید ۸۰۰۰ تا ارور بر می گردونه!!(آخرین نگارشی که من تست کردم ۶ و خورده ای بود))

بهتره که اون مقداری رو که میلاد گفته اول کدت بذاری (البته میلاد جان، شما هم بهتره که اون رو اضافه کنی :) )

موفق باشید، امید
 

Mikhak

Active Member
naeim_crack گفت:
سلام
مرسي شرمنده شايد من يه مقدار دير مي گيرم الان اينو داخل
کد:
<?php

اينجا هم كد شما رو بزارم 
?>

اينجوري بايد ازش استفداه كنم

ميشه يه توضيح بدي مرسي

هر جا كه دلت مي خواد كد اول رو بزار البته توي كدهاي php هر جا هم كه خواستي تاريخ ديده بشه كد دوم رو بذار البته بازم تو كد php ديگه خودت ميدوني ديگه پرسيدن نداره اين سوالا از برنامه نويسي مثل تو بعيده:)
------------
سينا
 

جدیدترین ارسال ها

بالا