PDA

View Full Version : سوال: مشکل در تبذیل تاریخ شمسی



billgivz
جمعه 27 خرداد 1390, 01:17 صبح
سلام دوستان من یک تابع تبدیل میلادی به شمسی دارم و یک مشکل کوچیک داره اینکه وقتی شب ساعت 12 میشه تاریخ به جلو کشیده نمیشه تریبا صبح تاریخ به جلو کشیده یعنی چند ساعت بعد .

تقزیبا ساعت 4 بامداد تاریخ رو میکشه جلو

در ضمن داخل local hots هم تست کردم همینجور بود و time zoon هم روی tehran هست

من کد رو میزارم دوستان لطف کنند مشکلش رو برطرف کنند



<?php
// بسم الله الرحمن الرحیم
// the function check a miladiyear is leap or not.
/*Eample
<?php
require("shamsi.php");
$test = new shamsi_date(2007,2,15);
echo "سال = " . $test->shamsi_year ."<br>";
echo "ماه = " . $test->shamsi_month."<br>";
echo "روز = " . $test->shamsi_day."<br>";
?>
*/
class shamsi_date
{

function __construct($iMiladiYear,$iMiladiMonth,$iMiladiDay )
{
$this->shamsi_year = 0;
$this->shamsi_month = 0;
$this->shamsi_day = 0;
$this->MiladiToShamsi($iMiladiMonth,$iMiladiDay,$iMiladiY ear);
}

function MiladiIsLeap($miladiYear)
{
if((($miladiYear % 100)!= 0 && ($miladiYear % 4) == 0) || (($miladiYear % 100)== 0 && ($miladiYear % 400) == 0))
return 1;
else
return 0;
}

function MiladiToShamsi($iMiladiMonth,$iMiladiDay,$iMiladiY ear)
{
$shamsiDay = 0; $shamsiMonth=0; $shamsiYear=0;
$dayCount=0;$farvardinDayDiff=0;$deyDayDiff=0 ;
$sumDayMiladiMonth = array(0,31,59,90,120,151,181,212,243,273,304,334);
$sumDayMiladiMonthLeap = array(0,31,60,91,121,152,182,213,244,274,305,335);
$farvardinDayDiff=79;
if ($this->MiladiIsLeap($iMiladiYear))
{
$dayCount = $sumDayMiladiMonthLeap[$iMiladiMonth-1] + $iMiladiDay;
}
else
{
$dayCount = $sumDayMiladiMonth[$iMiladiMonth-1] + $iMiladiDay;
}

if(($this->MiladiIsLeap($iMiladiYear - 1)))
{
$deyDayDiff = 11;
}
else
{
$deyDayDiff = 10;
}

if ($dayCount > $farvardinDayDiff)
{
$dayCount = $dayCount - $farvardinDayDiff;
if ($dayCount <= 186)
{
switch ($dayCount%31)
{
case 0:
$shamsiMonth = $dayCount / 31;
$shamsiDay = 31;
break;
default:
$shamsiMonth = ($dayCount / 31) + 1;
$shamsiDay = ($dayCount%31);
break;
}
$shamsiYear = $iMiladiYear - 621;
}
else
{
$dayCount = $dayCount - 186;
switch ($dayCount%30)
{
case 0:
$shamsiMonth = ($dayCount / 30) + 6;
$shamsiDay = 30;
break;
default:
$shamsiMonth = ($dayCount / 30) + 7;
$shamsiDay = ($dayCount%30);
break;
}
$shamsiYear = $iMiladiYear - 621;
}
}
else
{
$dayCount = $dayCount + $deyDayDiff;

switch ($dayCount%30)
{
case 0 :
$shamsiMonth = ($dayCount / 30) + 9;
$shamsiDay = 30;
break;
default:
$shamsiMonth = ($dayCount / 30) + 10;
$shamsiDay = ($dayCount%30);
break;
}
$shamsiYear = $iMiladiYear - 622;
}

if ($shamsiDay > 0 && $shamsiDay < 10 )
{
$this->shamsi_day = "0".(int)$shamsiDay ;
}
else
{
$this->shamsi_day = (int)$shamsiDay ;
};

if ($shamsiMonth >0 && $shamsiMonth < 10 )
{
$this->shamsi_month = "0".(int)$shamsiMonth ;
}
else
{
$this->shamsi_month = (int)$shamsiMonth ;
};

$this->shamsi_year = (int)$shamsiYear ;
}

}

?>

wallfa
جمعه 27 خرداد 1390, 12:37 عصر
من وقت نکردم تابع بررسی کنم ، اما فکر کنم این طبق تاریخ میلادی ساعت به روز میکونه . چرا از این تابع استفاده میکنی سرچ کن یه کلاس یه نفر براش نوشته!

این توی گوگل سرچ کن gregorian to jalali php class