<?php
/**
* Gedar Template Engine plugin
* @package Gedar
* @subpackage plugins
*/
/**
* Gedar {fdate} function
*
* Type: function
* Name: persian Date
* Purpose: change date format from georgen to jalali
* Syntax {fdate(date="yyyy-mm-dd" , separator="sep")}
* Special Thanks: from farsi project and masoud alinaqian
*
* @param array $params
* @param object $gedar
* @return date in jalali format
*/
function gedar_fdate_excute($params,&$gedar)
{
$date=$gedar->_getParamValue($params,"date");
$separator=$gedar->_getParamValue($params,"separator")?
$gedar->_getParamValue($params,"separator"):
" / ";
$return=$gedar->_makeVariable("<?php echo gedar_fdate_do($date,$separator); ?>");
return $return;
}
function _g_div($a, $b)
{
return (int) ($a / $b);
}
function gedar_fdate_do($gregorianDate,$separator)
{
if (is_array($gregorianDate))
{
list($g_y,$g_m,$g_d)=$gregorianDate;
}
else
{
@list($g_y,$g_m,$g_d)=split('\s|\/|\-',$gregorianDate);
}
$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+_g_div($gy+3,4)-_g_div($gy+99,100)+_g_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 = _g_div($j_day_no, 12053);
$j_day_no %= 12053;
$jy = 979+33*$j_np+4*_g_div($j_day_no,1461);
$j_day_no %= 1461;
if ($j_day_no >= 366)
{
$jy += _g_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;
if ($jm<10)
{
$jm='0'.$jm;
}
if ($jd<10)
{
$jd='0'.$jd;
}
return "$jy".$separator."$jm".$separator."$jd";
}
?>
|