Prayer Time Algorithm

Berikut ini algoritma sederhana perhitungan waktu sholat untuk daerah Jakarta dan sekitarnya. Untuk daerah lain tinggal disesuaikan latitude dan longitude-nya. Algoritma diambil dari Prayer Time Algorithm di http://www.islamway.com/flashes/7/PrayerTimes.zip

<script language="javascript" type="text/javascript">
<!--
    var today = new Date();
    var J = 0;                                  // Day of year
    var H = 4;                                  // The height above sea level in meters
    var D = 0;                                  // Solar Declination (Degrees)
    var T = 0;                                  // Equation of Time (Minutes)
    var Gd = 15;                                // Dawn’s Twilight Angle (15°-19°)
    var Gn = 15;                                // Night’s Twilight Angle (15°-19°)
    var B = -6.2;                               // Latitude (Degrees)
    var L = 106.8;                              // Longitude (Degrees)
    var TZ = 7;                                 // Time Zone (Hours)
    var R = 0;                                  // Reference Longitude (Degrees)  
    var Sh = 1;                                 // Sh=1 (Shafii) - Sh=2 (Hanafi)
    var firstYear = new Date();
    
    firstYear.setMonth(0);
    firstYear.setDate(1);
    J = (today - firstYear) / 86400000;
	var beta = 2 * Math.PI * J / 365            // Year angle
	D = (180/Math.PI) * (0.006918 - (0.399912 * Math.cos(beta)) + (0.070257 * Math.sin(beta)) - (0.006758 * Math.cos(2 * beta)) + (0.000907 * Math.sin(2 * beta)) - (0.002697 * Math.cos(3 * beta)) + (0.001480 * Math.sin(3 * beta)));
	T = 229.18 * (0.000075 + (0.001868 * Math.cos(beta)) - (0.032077 * Math.sin(beta)) - (0.014615 * Math.cos(2 * beta)) - (0.040849 * Math.sin(2 * beta)));
    R = 15 * TZ;
    var G = 18;
    var Z = 12 + ((R - L) / 15) - (T / 60);
    var U =  (180 / (15 * Math.PI)) * Math.acos((Math.sin((-0.8333 - 0.0347 * (H / Math.abs(H)) * Math.sqrt(Math.abs(H))) * (Math.PI / 180)) - Math.sin(D * (Math.PI / 180)) * Math.sin(B * (Math.PI / 180))) / (Math.cos(D * (Math.PI / 180)) * Math.cos(B * (Math.PI/180))));
    var Vd = (180 / (15 * Math.PI)) * Math.acos((-Math.sin(Gd * (Math.PI / 180)) - Math.sin(D * (Math.PI/180)) * Math.sin(B * (Math.PI / 180))) / (Math.cos(D * (Math.PI/180)) * Math.cos(B * (Math.PI/180))));
    var Vn = (180 / (15 * Math.PI)) * Math.acos((-Math.sin(Gn * (Math.PI / 180)) - Math.sin(D * (Math.PI/180)) * Math.sin(B * (Math.PI / 180))) / (Math.cos(D * (Math.PI/180)) * Math.cos(B * (Math.PI/180))));
    var W =  (180 / (15 * Math.PI)) * Math.acos((Math.sin(Math.atan(1/(Sh+Math.tan(Math.abs(B - D)*Math.PI/180))))-Math.sin(D*Math.PI/180)*Math.sin(B*Math.PI/180))/(Math.cos(D*Math.PI/180)*Math.cos(B*Math.PI/180)));
    function FormatTime(x) {
        var hour =  Math.floor(x);
        var minute = Math.floor((x - hour) * 60);
        var second = Math.floor((((x - hour) * 60) - minute) * 60);
        return (hour + ':' + minute + ':' + second);
    }
    document.writeln('<pre>');
    document.writeln('Fajar   : ' + FormatTime(Z-Vd));
    document.writeln('Terbit  : ' + FormatTime(Z-U));
    document.writeln('Dhuhur  : ' + FormatTime(Z));
    document.writeln('Ashar   : ' + FormatTime(Z+W));
    document.writeln('Maghrib : ' + FormatTime(Z+U));
    document.writeln('Isya    : ' + FormatTime(Z+Vn));
    document.writeln('</pre>'); 
// -->
</script>

Algoritma perhitungan waktu sholat di atas belum begitu akurat, bila ada yang punya algoritma lebih akurat bisa tambahkan comment.

Share this post: | | | |
Published Monday, July 23, 2007 1:22 PM by cahnom
Filed under:

Comments

# re: Prayer Time Algorithm

Friday, August 03, 2007 8:29 AM by asuhanto

Saya pakai AthanBasic. Di dalam Athan kayaknya banyak metode yang digunakan untuk menentukan waktu Subuh dan Ashar misalnya. Dan masing-masing metode menghasilkan waktu yang berbeda-beda. Pernah suatu kali Athan-ku sudah memperdengarkan Adzan tapi begitu shalat di Mushalla, jam otomatis Mushalla yang kebetulan diinstall juga alarm waktu Shalat berbunyi pada saat hampir salam... Wah, yg bener yg mana nih?

# re: Prayer Time Algorithm

Saturday, February 16, 2008 5:41 PM by Erozsidhy

Akurasi PrayerTime sebenarnya ditentukan oleh akurasi Jam yang kita pakai (masih dengan teknologi kristal kuarsa, belum jam-atom) sehingga algoritma apapun yang dipakai tetap belum bisa menolong, kecuali setiap periode waktu tertentu, misalnya tiap hari Jum'at jam yang kita pakai dikalibrasi dengan jam atom (bisa minta tolong rekan yang mempunyai peralatan GPS, sistem Jam di GPS mengikuti Jam-atom di Stasiun induknya).

Algoritma yang anda tulis, sebenarnya sudah layak dipakai. Hanya saja, muslim Indonesia (dan juga Malaysia) menggunakan Down Twilight Angle, Gd = 20 derajat (anda pakai 15 derajat) untuk Subuh dan Night Twilight Angle, Gn = 18 derajat (anda pakai 15 derajat) untuk Isya. Jika Gd dan Gn pada Algoritma anda diganti dengan Gd dan Gn tersebut, saya yakin algoritma anda sudah cocok dengan Prayer Time masjid-masjid di Indonesia. Selamat !

# re: Prayer Time Algorithm

Monday, February 18, 2008 7:38 AM by cahnom

Terima kasih atas masukannya. Masukan Anda sangat membantu saya. Saya akan coba buat komponen / service untuk menghitung waktu sholat.

Terima kasih

# re: Prayer Time Algorithm

Tuesday, March 18, 2008 9:38 AM by dani

azawala

# re: Prayer Time Algorithm

Wednesday, July 23, 2008 4:32 PM by 'ilm

Boleh saya tanya, apakah fungsi statement ini?:-

J = (today - firstYear) / 86400000;

Dan apakah apa yang terkandung di dalam 'today' dan 'firstYear' itu?

Terima kasih....

Leave a Comment

(required) 
(required) 
(optional)
(required) 

Enter the numbers above:
Powered by Community Server (Commercial Edition), by Telligent Systems