Skip to content

Menghitung Waktu Shalat dengan PHP!

August 14, 2011

Berselancar internet boleh-boleh saja, apalagi sambil berkunjung ke-blog kawan untuk saling sharing dan meng-update informasi. Tapi bagaimana jika kita suka lupa waktu ketika sudah didepan komputer, padahal kita sebagai muslim juga diharuskan shalat pada waktunya !?

Mungkin perlu adanya pengingat waktu shalat diblog atau website Anda agar ketika pengunjung lagi sibuk berselancar, mereka masih bisa untuk melihat jadwal waktu shalat termasuk untuk Anda sendiri. Untuk itu, kode dibawah ini bisa Anda pasang di website atau blog Anda sebagai pengingat waktu shalat.

Langsung aja gan,…

<?
// =====
// THIS SOURCE CODE IS FREE FOR USE
// IN THE NAME OF ALLAH SUBHANAHU WA TA'ALA
//
// Author: Fahmi al-Amri (fahmydoank[at]gmail.com)
// =====

function sign($x) {
if($x==0)
return 0;
else
return $x / abs($x);
}

function WaktuShalat($jadwal) {
$tanggal=getdate();
$J=$tanggal['yday'];

// EDIT..?!
$H = 0;    // Ketinggian laut (meter)
$Gd = 19.5;    // Sudut Fajar Senja (15°-19°)  -  Dawn’s Twilight Angle (15°-19°)
$Gn = 17.5;    // Sudut Malam Senja (15°-19°)  -  Night’s Twilight Angle (15°-19°)
$B = -6.25;    // Garis Lintang (derajat)  -  Latitude (Degrees)
$L = 107;    // Garis Bujur (derajat)  -  Longitude (Degrees)
$TZ = 7;    // Waktu Daerah (jam)  -  Time Zone (Hours)
$Sh = 1;    // Sh=1 (Shafii) - Sh=2 (Hanafi)
// STOP EDITING

$D = 0;    // Turun mengenai matahari (derajat)  -  Solar Declination (derajat)
$T = 0;    // Persamaan dari waktu (menit)  -  Equation of times (minutes)
$R = 0;    // Referensi Garis Bujur (derajat)  -  Reference Longitude (Degrees)

$beta = 2 * pi() * $J / 365;
$D = (180 / pi()) * (0.006918 - (0.399912 * cos($beta)) + (0.070257 * sin($beta)) - (0.006758 * cos(2 * $beta)) + (0.000907 * sin(2 * $beta)) - (0.002697 * cos(3 * $beta)) + (0.001480 * sin(3 * $beta)));
$T = 229.18 * (0.000075 + (0.001868 * cos($beta)) - (0.032077 * sin($beta)) - (0.014615 * cos(2 * $beta)) - (0.040849 * sin(2 * $beta)));
$R = 15 * $TZ;
$G = 18;
$Z = 12 + (($R - $L) / 15) - ($T / 60);
$U = (180 / (15 * pi())) * acos((sin((-0.8333 - 0.0347 * sign($H) * sqrt(abs($H))) * (pi() / 180)) - sin($D * (pi() / 180)) * sin($B * (pi() / 180))) / (cos($D * (pi() / 180)) * cos($B * (pi() / 180))));
$Vd = (180 / (15 * pi())) * acos((-sin($Gd * (pi() / 180)) - sin($D * (pi() / 180)) * sin($B * (pi() / 180))) / (cos($D * (pi() / 180)) * cos($B * (pi() / 180))));
$Vn = (180 / (15 * pi())) * acos((-sin($Gn * (pi() / 180)) - sin($D * (pi() / 180)) * sin($B * (pi() / 180))) / (cos($D * (pi() / 180)) * cos($B * (pi() / 180))));
$W = (180 / (15 * pi())) * acos((sin(atan(1 / ($Sh + tan(abs($B - $D) * pi() / 180))))-sin($D * pi() / 180) * sin($B * pi() / 180)) / (cos($D * pi() / 180) * cos($B * pi() / 180)));

switch ($jadwal) {
case 1:
$hasil = $Z-$Vd;
break;
case 2:
$hasil = $Z-$U;
break;
case 3:
$hasil = $Z;
break;
case 4:
$hasil = $Z+$W;
break;
case 5:
$hasil = $Z+$U;
break;
case 6:
$hasil = $Z+$Vn;
break;
}

$jam = floor($hasil);
$menit = floor(($hasil - $jam) * 60);
$detik = floor(((($hasil - $jam) * 60) - $menit) * 60);
if (strlen($jam)==1) $jam="0" . $jam;
if (strlen($menit)==1) $menit="0" . $menit;
if (strlen($detik)==1) $detik="0" . $detik;
$output = "$jam : $menit : $detik";
return $output;
}
echo "<pre>\n";
echo "Shubuh: " . WaktuShalat(1);
echo "<br>";
echo "Shurook: " . WaktuShalat(2);
echo "<br>";
echo "Dzuhur: " . WaktuShalat(3);
echo "<br>";
echo "Ashr: " . WaktuShalat(4);
echo "<br>";
echo "Maghrib: " . WaktuShalat(5);
echo "<br>";
echo "Isya’: " . WaktuShalat(6);
echo "\n</pre>";
?>

Perlu ada yang diperhatikan dan mungkin perlu ada penjelasannya. Silahkan lihat lagi kode diatas dan perhatikan kode dibawah baris EDIT sampai STOP EDITING.

H pada kode diatas menunjukkan nilai dari ketinggian laut (altitude) dengan satuan meter. Untuk daerah Jakarta dan sekitarnya, nilai ketinggian lautnya bernilai 0 (nol).

Gd dan Gn adalah nilai dari konvensi untuk sholat Shubuh dan Isya. Indonesia menggunakan nilai sudut fajar (Gd) = 19.5 dan nilai sudut malam (Gn) = 17.5 sesuai dengan survey Dinas Geologi Mesir (Egyptian General Organization of Surveying).

Variable B dan L adalah untuk nilai garis lintang (latitude) dan garis bujur (longitude) dengan satuannya derajat. Untuk daerah Jakarta dan sekitarnya, nilai latitude (B) = -6.25 dan longitude (L) = 107. Dan untuk daerah-daerah lainnya Anda bisa searching di internet.

TZ adalah waktu daerah (TimeZone). Sedangkan Sh adalah perhitungan waktu Asr sesuai madzab Syafi’i dengan nilai 1 atau Hanafi dengan nilai 2.

Silahkan Anda modifikasi sesuai dengan keinginan Anda dan juga sesuaikan dengan tampilan website Anda. Selamat mencoba…

Advertisement
Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.