Login   Register  
PHP Classes
elePHPant
Icontem

File: Hijri_GregorianConvert.class

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Layth A. Ibraheem  >  Hijri To Gregorian Date Convert  >  Hijri_GregorianConvert.class  >  Download  
File: Hijri_GregorianConvert.class
Role: Class source
Content type: text/plain
Description: Hijri to Gregorian convert class
Class: Hijri To Gregorian Date Convert
Convert dates between Gregorian to Hijri calendars
Author: By
Last change: No changes.
Date: 3 years ago
Size: 3,680 bytes
 

Contents

Class file image Download
<?php

// This class Convert Hijri date to Gregorian Date & vise versa, made by Layth A. Ibraheeim - 24-2-2011
// to test if the results are ok, please visit (http://www.oriold.uzh.ch/static/hegira.html)..

class Hijri_GregorianConvert
{
    var 
$Day;
    var 
$Month;
    var 
$Year;


    function 
intPart($floatNum)
    {
        if (
$floatNum< -0.0000001)
        {
            return 
ceil($floatNum-0.0000001);
        }
        return 
floor($floatNum+0.0000001);
    }

    function 
ConstractDayMonthYear($date,$format// extract day, month, year out of the date based on the format.
    
{
        
$this->Day="";
        
$this->Month="";
        
$this->Year="";

        
$format=strtoupper($format);
        
$format_Arstr_split($format);
        
$srcDate_Ar=str_split($date);

        for (
$i=0;$i<count($format_Ar);$i++)
        {

            switch(
$format_Ar[$i])
            {
                case 
"D":
                    
$this->Day.=$srcDate_Ar[$i];
                    break;
                case 
"M":
                    
$this->Month.=$srcDate_Ar[$i];
                    break;
                case 
"Y":
                    
$this->Year.=$srcDate_Ar[$i];
                    break;
            }
        }

    }


    function 
HijriToGregorian($date,$format// $date like 10121400, $format like DDMMYYYY, take date & check if its hijri then convert to gregorian date in format (DD-MM-YYYY), if it gregorian the return empty;
    
{

        
$this->ConstractDayMonthYear($date,$format);
        
$d=intval($this->Day);
        
$m=intval($this->Month);
        
$y=intval($this->Year);

        if (
$y<1700)
        {

        
$jd=$this->intPart((11*$y+3)/30)+354*$y+30*$m-$this->intPart(($m-1)/2)+$d+1948440-385;

        if (
$jd2299160 )
        {
            
$l=$jd+68569;
            
$n=$this->intPart((4*$l)/146097);
            
$l=$l-$this->intPart((146097*$n+3)/4);
            
$i=$this->intPart((4000*($l+1))/1461001);
            
$l=$l-$this->intPart((1461*$i)/4)+31;
            
$j=$this->intPart((80*$l)/2447);
            
$d=$l-$this->intPart((2447*$j)/80);
            
$l=$this->intPart($j/11);
            
$m=$j+2-12*$l;
            
$y=100*($n-49)+$i+$l;
        }
        else
        {
            
$j=$jd+1402;
            
$k=$this->intPart(($j-1)/1461);
            
$l=$j-1461*$k;
            
$n=$this->intPart(($l-1)/365)-$this->intPart($l/1461);
            
$i=$l-365*$n+30;
            
$j=$this->intPart((80*$i)/2447);
            
$d=$i-$this->intPart((2447*$j)/80);
            
$i=$this->intPart($j/11);
            
$m=$j+2-12*$i;
            
$y=4*$k+$n+$i-4716;
        }

        if (
$d<10)
            
$d="0".$d;

        if (
$m<10)
            
$m="0".$m;

        return 
$d."-".$m."-".$y;
        }
        else
            return 
"";
    }



    function 
GregorianToHijri($date,$format// $date like 10122011, $format like DDMMYYYY, take date & check if its gregorian then convert to hijri date in format (DD-MM-YYYY), if it hijri the return empty;
     
{
        
$this->ConstractDayMonthYear($date,$format);
        
$d=intval($this->Day);
        
$m=intval($this->Month);
        
$y=intval($this->Year);

        if (
$y>1700)
        {
        if ((
$y>1582)||(($y==1582)&&($m>10))||(($y==1582)&&($m==10)&&($d>14)))
        {
            
$jd=$this->intPart((1461*($y+4800+$this->intPart(($m-14)/12)))/4)+$this->intPart((367*($m-2-12*($this->intPart(($m-14)/12))))/12)-$this->intPart((3*($this->intPart(($y+4900+$this->intPart(($m-14)/12))/100)))/4)+$d-32075;
        }
        else
        {
            
$jd 367*$y-$this->intPart((7*($y+5001+$this->intPart(($m-9)/7)))/4)+$this->intPart((275*$m)/9)+$d+1729777;
        }

        
$l=$jd-1948440+10632;
        
$n=$this->intPart(($l-1)/10631);
        
$l=$l-10631*$n+354;
        
$j=($this->intPart((10985-$l)/5316))*($this->intPart((50*$l)/17719))+($this->intPart($l/5670))*($this->intPart((43*$l)/15238));
        
$l=$l-($this->intPart((30-$j)/15))*($this->intPart((17719*$j)/50))-($this->intPart($j/16))*($this->intPart((15238*$j)/43))+29;
        
$m=$this->intPart((24*$l)/709);
        
$d=$l-$this->intPart((709*$m)/24);
        
$y=30*$n+$j-30;

        if (
$d<10)
            
$d="0".$d;

        if (
$m<10)
            
$m="0".$m;

        return 
$d."-".$m."-".$y;
        }
        else
        return 
"";


    }

}



?>