drstrike
شنبه 30 بهمن 1389, 21:41 عصر
سلام...
2 روزه که دارم سرچ میکنم اما یکی کامل در مورد الگوریتم تابع جلالی توضیح نداده! هر چی هست کد آماده و همشون هم مثله هم!
از کد سایت iranphp گرفته تا سایت joomla و مقاله تبیان و .... به هر زبانی کد گرفتم: php, c++, python, delphi و...
همشون اینطوری نوشتن:
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);
}
چن تا سوال برام پیش اومده که هرچی فک کردم نفهمیدم! :افسرده:
- چرا سال رو منهای 1600 کرده؟!
- چرا روز رو منهای یک کرده؟!!
- متغیر $g_day_no تعداد کل روزهای سال رو نگهداری می کنه (فک کنم). چه طرز محاسبه کل روزهای ساله؟!! اون اعداد 3و4 و 99و100 و 399و400 چرا استفاده میشن؟
و...
اینجام هر چی گشتم فقط کد گذاشتن، کسی توضیح نداده....
ممنون میشم یکی کامل توضیح بده
2 روزه که دارم سرچ میکنم اما یکی کامل در مورد الگوریتم تابع جلالی توضیح نداده! هر چی هست کد آماده و همشون هم مثله هم!
از کد سایت iranphp گرفته تا سایت joomla و مقاله تبیان و .... به هر زبانی کد گرفتم: php, c++, python, delphi و...
همشون اینطوری نوشتن:
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);
}
چن تا سوال برام پیش اومده که هرچی فک کردم نفهمیدم! :افسرده:
- چرا سال رو منهای 1600 کرده؟!
- چرا روز رو منهای یک کرده؟!!
- متغیر $g_day_no تعداد کل روزهای سال رو نگهداری می کنه (فک کنم). چه طرز محاسبه کل روزهای ساله؟!! اون اعداد 3و4 و 99و100 و 399و400 چرا استفاده میشن؟
و...
اینجام هر چی گشتم فقط کد گذاشتن، کسی توضیح نداده....
ممنون میشم یکی کامل توضیح بده