به نام خدا؛
سلام دوستان امیدوارم حالتون خوب باشه...
حتماً براتون پیش اومده که بخواین اوقات شرعی (شامل ساعت طلوع و غروب آفتاب، اذان ظهر، اذان مغرب و نیمه شب شرعی) رو به دست بیارین. امروز قصد دارم کد PHP رو به شما معرفی کنم که بدون اینکه از API خاصی استفاده کنه تنها با توابع ریاضی اوقات شرعی رو محاسبه کنه. پس با من همراه باشین.
دریافت اوقات شرعی:
قبل از هر چیز باید شیء اِی جَکس (AJAX) رو به پروژه تون اضافه کنین و کد PHP رو در یک دایرکتوری دلخواه از هاست یا سرورتون آپلود کنین.خُب حالا برای استفاده از این کد کافیه اکشن Request URL شیء AJAX رو انتخاب کنین. آرگومان Tag رو هر مقداری که خواستین بهش بدین یا هم اصلاً مقداری براش لحاظ نکنین. آرگومان URL رو به شکل زیر تعریف کنین:همونطور که مشخصه ما 5 پارامتر رو به فایل PHP ارسال می کنیم. پارامتر long در واقع طول جغرافیایی شهری هست که قصد داریم اوقات شرعی اش رو محاسبه کنیم و پارامتر lat هم عرض جغرافیایی اون شهر هست. میتونین مختصات شهرهای ایران رو از این لینک مشاهده کنین و ازش استفاده کنین. حواستون باشه که یک وقت جا به جا طول و عرض جغرافیایی رو وارد نکنید. پارامتر month در واقع برای مشخص کردن شماره ماه تعیین میشه. پارامتر day هم برای مشخص کردن شماره روز در ماه به کار میره. دقت کنین مبنای شما برای وارد کردن شماره روز و ماه تاریخ شمسی خودمون هست. پارامتر prayer_time برای تعیین کردن نمایش هر یک از اوقات شرعی به کار میره. به طوری که اگر خواستین اذان صبح نمایش داده بشه عبارت azan_sobh، برای نماز ظهر عبارت azan_zohr، برای اذان مغرب عبارت azan_maghreb، برای طلوع خورشید عبارت sunrise، برای غروب خورشید عبارت sunset و برای نیمه شب شرعی عبارت nimeshabesahree رو دقیقاً برای پارامتر prayer_time قرار بدین. اگر همه موارد رو خواستین میتونین عبارت prayer_time رو برابر با عبارت all قرار بدین.
نکته: الگوریتم محاسبه اوقات شرعی میتونه همراه با خطا (حداکثر تا نیم ساعت) باشه. برای افزایش هر چه بیشتر دقت الگوریتم توصیه میشه طول و عرض جغرافیایی شهر موردنظر رو با دقت بیشتری (تعداد اعشار بیشتری) وارد کنین.
توضیحات خروجی ارورهای کد PHP:(عبارت x بیانگر نام هر یک از پارامترها می باشد.)(عبارت y بیانگر تعداد ارورهای یافت شده می باشد.)
امیدوارم این مطلب براتون مفید و کاربردی واقع شده باشه.
خوشحال میشم نظراتتون رو به بنده گوشزد کنین و اگر جایی ایرادی مشاهده میشه اعلام کنین.
با آرزوی بهترین ها...
سلام دوستان امیدوارم حالتون خوب باشه...
حتماً براتون پیش اومده که بخواین اوقات شرعی (شامل ساعت طلوع و غروب آفتاب، اذان ظهر، اذان مغرب و نیمه شب شرعی) رو به دست بیارین. امروز قصد دارم کد PHP رو به شما معرفی کنم که بدون اینکه از API خاصی استفاده کنه تنها با توابع ریاضی اوقات شرعی رو محاسبه کنه. پس با من همراه باشین.
دریافت اوقات شرعی:
قبل از هر چیز باید شیء اِی جَکس (AJAX) رو به پروژه تون اضافه کنین و کد PHP رو در یک دایرکتوری دلخواه از هاست یا سرورتون آپلود کنین.
کد:
<?php
/**
* @author Master Badfar
* @copyright 2020
*/
// صدور مجوز برای AJAX
header('Access-Control-Allow-Origin: *');
// قطع نمایش خطاهای مفسر PHP
ini_set('display_errors', 0);
error_reporting(~E_WARNING & ~E_NOTICE & ~E_STRICT);
// متغیر میزان ارور
$error = 0;
// فانکشن بررسی خالی بودن پارامترها
function check_param($param,$errMsg){
global $error;
if (empty($_GET[$param])){
echo $errMsg . '</br>';
$error++;
}
}
// استفاده از تابع تعریف شده برای چک کردن پارامترها
check_param('lat' , 'You should enter the latitude.');
check_param('long' , 'You should enter the longitude.');
check_param('prayer_time' , 'You should enter the prayertime.');
check_param('month' , 'You should enter the month.');
check_param('day' , 'You should enter the day.');
// تابع محاسبه اوقات شرعی
function owghat($m,$d,$lg,$lat,$seconds=1,$dslst=1,$farsi=1){
$a_2=array(107.695,90.833,0,90.833,94.5,0);
$doy_1=(($m<7)?($m-1):6) + (($m-1)*30) + $d;
for($h=0,$i=0;$i<6;$i++){
$s_m=$m;$s_lg=$lg;
if($i<5){
$doy=$doy_1+($h/24);
$s_m=74.2023+(0.98560026*$doy);
$s_l=-2.75043+(0.98564735*$doy);
$s_lst=8.3162159+(0.065709824*floor($doy))+(24.06570984*fmod($doy,1))+($s_lg/15);
$s_omega=(4.85131-(0.052954*$doy))*0.0174532;
$s_ep=(23.4384717+(0.00256*cos($s_omega)))*0.0174532;
$s_u=$s_m;
for($s_i=1;$s_i<5;$s_i++){
$s_u=$s_u-(($s_u-$s_m-(0.95721*sin(0.0174532*$s_u)))/(1-(0.0167065*cos(0.0174532*$s_u))));
}
$s_v=2*(atan(tan(0.00872664*$s_u)*1.0168)*57.2957);
$s_theta=($s_v-$s_m-2.75612-(0.00479*sin($s_omega))+(0.98564735*$doy))*0.0174532;
$s_delta=asin(sin($s_ep)*sin($s_theta))*57.2957;
$s_alpha=57.2957*atan2(cos($s_ep)*sin($s_theta),cos($s_theta));
if($s_alpha>=360)$s_alpha-=360;
$s_ha=$s_lst-($s_alpha/15);
$s_zohr=fmod($h-$s_ha,24);
$loc2hor=((acos(((cos(0.0174532*$a_2[$i])-sin(0.0174532*$s_delta)*sin(0.0174532*$lat))/cos(0.0174532*$s_delta)/cos(0.0174532*$lat)))*57.2957)/15);
$azan[$i]=fmod((($i<2)?($s_zohr-$loc2hor):(($i>2)?$s_zohr+$loc2hor:$s_zohr)),24);
}else{
$azan[$i]=($azan[0]+$azan[3]+24)/2;
}
$x=$azan[$i];
if($dslst==1 and $doy_1>1 and $doy_1<186){$x++;}else{$dslst=0;}
if($x<0){$x+=24;}elseif($x>=24){$x-=24;}
$hor=(int)($x);
$ml=fmod($x,1)*60;
$min=(int)($ml);
$mr=round($ml);
if($mr==60){$mr=0;$hor++;}
$sec=(int)(fmod($ml,1)*60);
$a_1[$i]=(($hor<10)?'0':'').$hor.':'.( ($seconds==0) ? ((($mr<10)?'0':'').$mr) : ((($min<10)?'0':'').$min.':'.(($sec<10)?'0':'').$sec) );
if($h==0){$h=$azan[$i];$i--;}else{$h=0;}
}
$out=array(
'azan_sobh'=>$a_1[0],
'sunrise'=>$a_1[1],
'azan_zohr'=>$a_1[2],
'sunset'=>$a_1[3],
'azan_maghreb'=>$a_1[4],
'nimeshabesharee'=>$a_1[5],
'month'=>$m,
'day'=>$d,
'longitude'=>$lg,
'latitude'=>$lat,
'show_seconds'=>$seconds,
'daylight_saving_time'=>$dslst,
'farsi_numbers'=>$farsi
);
if($farsi==1)$out=str_replace(array('0','1','2','3','4','5','6','7','8','9','.'),array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹','٫'),$out);
return $out;
}
// نمایش تعداد کل ارورها
if ($error > 0 ){
echo "Number of Total Errors: " . $error . '</br>';
}
// استفاده از تابع جهت محاسبه اوقات شرعی
if ($error == 0 && $_GET['prayer_time'] != "all"){
$ogt=owghat( $_GET['month'] , $_GET['day'] , $_GET['long'] , $_GET['lat'] , 0 , 1 , 0);
echo $_GET['prayer_time'] . " " . "is: " . $ogt[$_GET['prayer_time']];
}elseif($_GET['prayer_time'] == "all" && $error == 0){
$ogt=owghat( $_GET['month'] , $_GET['day'] , $_GET['long'] , $_GET['lat'] , 0 , 1 , 0);
echo 'azan sobh is:' . " ". $ogt['azan_sobh'] . '</br>';
echo 'azan zohr is:' . " ". $ogt['azan_zohr'] . '</br>';
echo 'azan maghreb is:' . " ". $ogt['azan_maghreb'] . '</br>';
echo 'nimeshabesahree is:' . " ". $ogt['nimeshabesharee'] . '</br>';
echo 'sunset is:' . " ". $ogt['sunset'] . '</br>';
echo 'sunrise is:' . " ". $ogt['sunrise'] . '</br>';
}
?>
کد:
"http://yourhost.com/file.php?long="&x&"&lat="&y&"&month="&z&"&day="&m&"&prayer_time="&"azan_sobh/azan_zohr/sunrise/sunset/nimeshabesahree/azan_maghreb/all"
نکته: الگوریتم محاسبه اوقات شرعی میتونه همراه با خطا (حداکثر تا نیم ساعت) باشه. برای افزایش هر چه بیشتر دقت الگوریتم توصیه میشه طول و عرض جغرافیایی شهر موردنظر رو با دقت بیشتری (تعداد اعشار بیشتری) وارد کنین.
توضیحات خروجی ارورهای کد PHP:
- * اگر برای هر یک از پارامترها (lat،long،day،month و prayer_time) مقداری تعیین نشده باشد پیغام زیر نمایش داده خواهد شد:
کد:
You should enter the (x).
- * اگر تعداد کل ارورها بیش از یک عدد شود پیغام زیر پس از نمایش سایر ارورها در انتها نمایش داده خواهد شد:
کد:
Number of Total Errors: (y)
امیدوارم این مطلب براتون مفید و کاربردی واقع شده باشه.
خوشحال میشم نظراتتون رو به بنده گوشزد کنین و اگر جایی ایرادی مشاهده میشه اعلام کنین.
با آرزوی بهترین ها...