note 27917 modified in ref.datetime by visualmind
| From: | visualmind@php.net | Date: | Wed, 25 Dec 2002 10:25:27 +0000 |
| Subject: | note 27917 modified in ref.datetime by visualmind | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-41275@lists.php.net to get a copy of this message | ||
Here's a new function for Hejri (Hijri) date conversion, It has a better flawless calculation
than the previous posted function and it's implemented to be an official alternative for the
php DATE function which returns Arabic Translated date and optionally Hejri converted.
Note: to view arabic titles correctly change view-encoding to Arabic-Windows (windows-1256)
function arabicDate($format, $timestamp) {
/*
written by Salah Faya (visualmind@php.net) http://www.php4arab.info/scripts/arabicDate
$format:
[*]hj|ar|en:[jdl][Fmn][Yy][Aa] (php.date function handles the rest chars)
* will add <span dir=rtl lang=ar-sa>..</span>
examples:
echo arabicDate('hj:l d-F-Y åÜ', time());
echo arabicDate('ar:l d/F - h:iA', time());
*/
$format=trim($format);
if (substr($format,0,1)=='*') {
$use_span=true;
$format=substr($format,1);
} else $use_span=false;
$type=substr($format,0,3);
$arDay = array("Sat"=>"ÇáÓÈÊ",
"Sun"=>"ÇáÃÍÏ", "Mon"=>"ÇáÅËäíä",
"Tue"=>"ÇáËáÇËÇÁ",
"Wed"=>"ÇáÃÑÈÚÇÁ", "Thu"=>"ÇáÎãíÓ",
"Fri"=>"ÇáÌãÚÉ");
$ampm=array('am'=>'ÕÈÇÍÇ','pm'=>'ãÓÇÁ');
list($d,$m,$y,$dayname,$monthname,$am)=explode(' ',date('d m Y D M a',
$timestamp));
if ($type=='hj:') {
if
(($y>1582)||(($y==1582)&&($m>10))||(($y==1582)&&($m==10)&&($d>14)))
{
$jd=ard_int((1461*($y+4800+ard_int(($m-14)/12)))/4);
$jd+=ard_int((367*($m-2-12*(ard_int(($m-14)/12))))/12);
$jd-=ard_int((3*(ard_int(($y+4900+ard_int(($m-14)/12))/100)))/4);
$jd+=$d-32075;
} else {
$jd = 367*$y-ard_int((7*($y+5001 + ard_int(($m-9)/7)))/4) + ard_int((275*$m)/9)+$d+1729777;
}
$l=$jd-1948440+10632;
$n=ard_int(($l-1)/10631);
$l=$l-10631*$n+355; // Correction: 355 instead of 354
$j=(ard_int((10985-$l)/5316)) * (ard_int((50*$l)/17719)) + (ard_int($l/5670)) *
(ard_int((43*$l)/15238));
$l=$l-(ard_int((30-$j)/15)) * (ard_int((17719*$j)/50)) - (ard_int($j/16)) *
(ard_int((15238*$j)/43))+29;
$m=ard_int((24*$l)/709);
$d=$l-ard_int((709*$m)/24);
$y=30*$n+$j-30;
$format=substr($format,3);
$hjMonth = array("ãÍÑã", "ÕÝÑ", "ÑÈíÚ Ãæá",
"ÑÈíÚ ËÇäí",
"ÌãÇÏ Ãæá", "ÌãÇÏ ËÇäí", "ÑÌÈ",
"ÔÚÈÇä", "ÑãÖÇä", "ÔæÇá", "Ðæ ÇáÞÚÏÉ",
"Ðæ ÇáÍÌÉ");
$format=str_replace('j', $d, $format);
$format=str_replace('d', str_pad($d,2,0,STR_PAD_LEFT), $format);
$format=str_replace('l', $arDay[$dayname], $format);
$format=str_replace('F', $hjMonth[$m-1], $format);
$format=str_replace('m', str_pad($m,2,0,STR_PAD_LEFT), $format);
$format=str_replace('n', $m, $format);
$format=str_replace('Y', $y, $format);
$format=str_replace('y', substr($y,2), $format);
$format=str_replace('a', substr($ampm[$am],0,1), $format);
$format=str_replace('A', $ampm[$am], $format);
} elseif ($type=='ar:') {
$format=substr($format,3);
$arMonth=array("Jan"=>"íäÇíÑ",
"Feb"=>"ÝÈÑÇíÑ","Mar"=>"ãÇÑÓ",
"Apr"=>"ÇÈÑíá", "May"=>"ãÇíæ",
"Jun"=>"íæäíæ", "Jul"=>"íæáíæ",
"Aug"=>"ÇÛÓØÓ", "Sep"=>"ÓÈÊãÈÑ",
"Oct"=>"ÇßÊæÈÑ",
"Nov"=>"äæÝãÈÑ", "Dec"=>"ÏíÓãÈÑ");
$format=str_replace('l', $arDay[$dayname], $format);
$format=str_replace('F', $arMonth[$monthname], $format);
$format=str_replace('a', substr($ampm[$am],0,1), $format);
$format=str_replace('A', $ampm[$am], $format);
}
$date = date($format, $timestamp);
if ($use_span) return '<span dir="rtl"
lang="ar-sa">'.$date.'</span>';
else return $date;
}
function ard_int($float) {
return ($float < -0.0000001) ? ceil($float-0.0000001) : floor($float+0.0000001);
}
--was--
Here's a new function for Hejri / Hijri date conversion, It has a better flawless calculation
than the previous posted function and it's implemented to be an official alternative for the
php DATE function which returns Arabic Translated date and optionally Hejri converted.
function arabicDate($format, $timestamp) {
/*
written by Salah Faya (visualmind@php.net) http://www.php4arab.info/scripts/arabicDate
$format:
[*]hj|ar|en:[jdl][Fmn][Yy][Aa] (php.date function handles the rest chars)
* will add <span dir=rtl lang=ar-sa>..</span>
examples:
echo arabicDate('hj:l d-F-Y åÜ', time());
echo arabicDate('ar:l d/F - h:iA', time());
*/
$format=trim($format);
if (substr($format,0,1)=='*') {
$use_span=true;
$format=substr($format,1);
} else $use_span=false;
$type=substr($format,0,3);
$arDay = array("Sat"=>"ÇáÓÈÊ",
"Sun"=>"ÇáÃÍÏ", "Mon"=>"ÇáÅËäíä",
"Tue"=>"ÇáËáÇËÇÁ",
"Wed"=>"ÇáÃÑÈÚÇÁ", "Thu"=>"ÇáÎãíÓ",
"Fri"=>"ÇáÌãÚÉ");
$ampm=array('am'=>'ÕÈÇÍÇ','pm'=>'ãÓÇÁ');
list($d,$m,$y,$dayname,$monthname,$am)=explode(' ',date('d m Y D M a',
$timestamp));
if ($type=='hj:') {
if
(($y>1582)||(($y==1582)&&($m>10))||(($y==1582)&&($m==10)&&($d>14)))
{
$jd=ard_int((1461*($y+4800+ard_int(($m-14)/12)))/4);
$jd+=ard_int((367*($m-2-12*(ard_int(($m-14)/12))))/12);
$jd-=ard_int((3*(ard_int(($y+4900+ard_int(($m-14)/12))/100)))/4);
$jd+=$d-32075;
} else {
$jd = 367*$y-ard_int((7*($y+5001 + ard_int(($m-9)/7)))/4) + ard_int((275*$m)/9)+$d+1729777;
}
$l=$jd-1948440+10632;
$n=ard_int(($l-1)/10631);
$l=$l-10631*$n+355; // Correction: 355 instead of 354
$j=(ard_int((10985-$l)/5316)) * (ard_int((50*$l)/17719)) + (ard_int($l/5670)) *
(ard_int((43*$l)/15238));
$l=$l-(ard_int((30-$j)/15)) * (ard_int((17719*$j)/50)) - (ard_int($j/16)) *
(ard_int((15238*$j)/43))+29;
$m=ard_int((24*$l)/709);
$d=$l-ard_int((709*$m)/24);
$y=30*$n+$j-30;
$format=substr($format,3);
$hjMonth = array("ãÍÑã", "ÕÝÑ", "ÑÈíÚ Ãæá",
"ÑÈíÚ ËÇäí",
"ÌãÇÏ Ãæá", "ÌãÇÏ ËÇäí", "ÑÌÈ",
"ÔÚÈÇä", "ÑãÖÇä", "ÔæÇá", "Ðæ ÇáÞÚÏÉ",
"Ðæ ÇáÍÌÉ");
$format=str_replace('j', $d, $format);
$format=str_replace('d', str_pad($d,2,0,STR_PAD_LEFT), $format);
$format=str_replace('l', $arDay[$dayname], $format);
$format=str_replace('F', $hjMonth[$m-1], $format);
$format=str_replace('m', str_pad($m,2,0,STR_PAD_LEFT), $format);
$format=str_replace('n', $m, $format);
$format=str_replace('Y', $y, $format);
$format=str_replace('y', substr($y,2), $format);
$format=str_replace('a', substr($ampm[$am],0,1), $format);
$format=str_replace('A', $ampm[$am], $format);
} elseif ($type=='ar:') {
$format=substr($format,3);
$arMonth=array("Jan"=>"íäÇíÑ",
"Feb"=>"ÝÈÑÇíÑ","Mar"=>"ãÇÑÓ",
"Apr"=>"ÇÈÑíá", "May"=>"ãÇíæ",
"Jun"=>"íæäíæ", "Jul"=>"íæáíæ",
"Aug"=>"ÇÛÓØÓ", "Sep"=>"ÓÈÊãÈÑ",
"Oct"=>"ÇßÊæÈÑ",
"Nov"=>"äæÝãÈÑ", "Dec"=>"ÏíÓãÈÑ");
$format=str_replace('l', $arDay[$dayname], $format);
$format=str_replace('F', $arMonth[$monthname], $format);
$format=str_replace('a', substr($ampm[$am],0,1), $format);
$format=str_replace('A', $ampm[$am], $format);
}
$date = date($format, $timestamp);
if ($use_span) return '<span dir="rtl"
lang="ar-sa">'.$date.'</span>';
else return $date;
}
http://www.php.net/manual/en/ref.datetime.php