Results 1 to 6 of 6
  1. #1
    Join Date
    Feb 2008
    Posts
    3
    Plugin Contributions
    0

    Default Change Gregorian Date To Shamsi(Jalali) Date

    Hi,

    i am developer of zen-cart (the great !) to persian language i translated language files and modified templates and css changes for persian languages but i should change date format from Gregorian to Shamsi ( jalali) date

    this is persian date function :

    Code:
    function pdate($type,$maket="now")
    {
    	//set 1 if you want translate number to farsi or if you don't like set 0
    	$transnumber=0;
    	///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=pmktime(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 pmktime($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($pdate2=="1") break;
    			if($pdate2!="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
    
    
    
    
    
    
    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); 
    }
    now do you can help me for this ? i changed date of phpbb , mybb and other with this founction but i could not change zen-cart date to persian ! please help me !
    Last edited by Persain-Dev; 24 Feb 2008 at 03:11 AM.

  2. #2
    Join Date
    Jul 2005
    Location
    Upstate NY
    Posts
    22,010
    Plugin Contributions
    25

    Default Re: Change Gregorian Date To Shamsi(Jalali) Date

    A little research shows that this function is not native to PHP, so it needs to be run as part of an application where you wish to use it. I presume you are doing this, but *maybe* Zen Cart is structured differently from the other apps you have used it in. I see that the class for this

    class PersianDateHelper extends Helper

    is based on a class called Helper... The Zen Cart structure has classes extending "base" in order to use the observer/notifier system (see the wiki for details). Could this have anything to do with the problem?

    I hope DrByte will be able to shed real light on the subject.

  3. #3
    Join Date
    Feb 2008
    Posts
    3
    Plugin Contributions
    0

    Default Re: Change Gregorian Date To Shamsi(Jalali) Date

    i dont know zen-cart structure completely i cant write Helper Class for this system ! if you can please help me !

    but i found that dates generates in functions_general.php and function zen_date_long and function zen_date_short from $raw_date ! with YYYY-MM-DD HH:MM:SS format ! i want enter this raw date in persian date function do you have any idea about it ?

  4. #4
    Join Date
    Jan 2004
    Posts
    66,364
    Blog Entries
    7
    Plugin Contributions
    274

    Default Re: Change Gregorian Date To Shamsi(Jalali) Date

    Zen Cart's date functions in the current version are not class-based.
    You'll have to edit the functions files themselves to accomplish what you desire.
    .

    Zen Cart - putting the dream of business ownership within reach of anyone!
    Donate to: DrByte directly or to the Zen Cart team as a whole

    Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
    Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.

  5. #5
    Join Date
    Feb 2008
    Posts
    3
    Plugin Contributions
    0

    Default Re: Change Gregorian Date To Shamsi(Jalali) Date

    where are date functions in zen-cart ? (in wich files ? )

  6. #6
    Join Date
    Feb 2009
    Location
    Sydney, Australia
    Posts
    43
    Plugin Contributions
    0

    Default Re: Change Gregorian Date To Shamsi(Jalali) Date

    So is it possible to just show the month.

    Say show only Customers Birthday Month?

    Thanks

 

 

Similar Threads

  1. order delivery date addon - date not showing in checkout
    By jagall in forum Addon Shipping Modules
    Replies: 4
    Last Post: 19 Oct 2017, 09:09 PM
  2. Expected date products - change date for all.
    By navido in forum General Questions
    Replies: 2
    Last Post: 8 Nov 2010, 06:06 PM
  3. How do I Change the "date added" date?
    By JEKB in forum General Questions
    Replies: 4
    Last Post: 2 Sep 2010, 10:15 AM
  4. Easy Populate and the Date added updated to todays date issue.
    By cyphercys in forum All Other Contributions/Addons
    Replies: 5
    Last Post: 9 Mar 2010, 04:26 AM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
disjunctive-egg
Zen-Cart, Internet Selling Services, Klamath Falls, OR