πŸ”§ Dev Tools β€” Waktu Solat Malaysia

Skrip pembantu yang digunakan semasa pembangunan aplikasi waktu solat untuk mengesahkan ketepatan pengiraan berbanding data JAKIM.

1 Β· Perbandingan JAKIM
2 Β· Probe Koordinat
3 Β· Probe Ihtiyati
4 Β· Fetch JAKIM API
5 Β· Kod Sumber Dev

Perbandingan Pengiraan vs Data JAKIM

Masukkan waktu JAKIM yang diterbitkan untuk sesuatu zon dan tarikh, kemudian bandingkan dengan hasil pengiraan tempatan. Perbezaan ≀1 minit dianggap padanan, 2 minit hampir, β‰₯3 minit berbeza.

Waktu JAKIM (HH:MM) β€” kosongkan jika tidak tahu:

Probe Koordinat β€” Cari Titik Rujukan

Imbas julat latitud atau longitud untuk mencari koordinat yang menghasilkan waktu solat tertentu. Digunakan untuk mengesahkan titik rujukan barat/timur bagi setiap zon. Waktu sasaran adalah waktu JAKIM yang diketahui.

Probe Ihtiyati β€” Tentukan Margin Berjaga-jaga

Diberi koordinat dan data JAKIM, imbas semua kombinasi ihtiyati (0–15 minit) untuk semua waktu solat dan cari set yang paling hampir dengan data JAKIM. Ini adalah cara kami mengesahkan nilai ihtiyati +10m Subuh, +2m Zohor dll.

Waktu JAKIM (minit dari tengah malam β€” atau format HH:MM):

Fetch Data JAKIM API (untuk Semakan Silang)

Ambil data waktu solat terus dari API e-Solat JAKIM untuk digunakan sebagai nilai rujukan dalam perbandingan. Data ini tidak digunakan dalam aplikasi utama β€” hanya untuk pengesahan semasa pembangunan.

Nota: API JAKIM mungkin mempunyai sekatan CORS. Jika gagal dari pelayar, gunakan proksi atau jalankan dari Node.js. Skrip Node.js disediakan dalam Tab 5.

Endpoint JAKIM: https://www.e-solat.gov.my/index.php?r=esolatApi/takwimsolat&period={period}&zone={zone}

Skrip Node.js β€” Digunakan Semasa Pembangunan

Skrip-skrip ini dijalankan terus dalam terminal Node.js untuk menyiasat punca perbezaan antara pengiraan dan data JAKIM. Salin dan jalankan dengan node script.js.

Probe Longitud
Probe Ihtiyati
Kesan Bug Formula
Fetch JAKIM (Node)
// ═══════════════════════════════════════════════════════ // SKRIP 1: Probe Longitud // Tujuan: Cari koordinat yang menghasilkan Subuh = 06:03 (JHR02) // Digunakan pada: 18 Mac 2026 // Penemuan: Titik rujukan bukan pusat JB (~103.75Β°E) tapi sempadan // barat zon (~103.62Β°E, kawasan Kulai) // ═══════════════════════════════════════════════════════ function sinD(d){ return Math.sin(d*Math.PI/180); } function cosD(d){ return Math.cos(d*Math.PI/180); } function acosD(x){ return Math.acos(x)*180/Math.PI; } function jd(y,m,d){ if(m<=2){y--;m+=12;} const A=Math.floor(y/100), B=2-A+Math.floor(A/4); return Math.floor(365.25*(y+4716))+Math.floor(30.6001*(m+1))+d+B-1524.5; } function calcFajr(lat, lng, tz){ const J = jd(2026,3,18); const T = 2*Math.PI*(J-2451545)/365.25; // T dalam radian const DELTA = 0.37877 + 23.264 * sinD(57.297*T - 79.547) // 57.297 menukar radianβ†’darjah + 0.3812 * sinD(2*57.297*T - 82.682) + 0.17132 * sinD(3*57.297*T - 59.722); const U=(J-2451545)/36525, L0=280.46607+36000.7698*U; const ET=(-(1789+237*U)*sinD(L0)-(7146-62*U)*cosD(L0) +(9934-14*U)*sinD(2*L0)-(29+5*U)*cosD(2*L0) +(74+10*U)*sinD(3*L0)+(320-4*U)*cosD(3*L0) -212*sinD(4*L0))/1000; const TT = 12 + tz - (lng/15) - (ET/60); const cosH = (sinD(-20) - sinD(lat)*sinD(DELTA)) / (cosD(lat)*cosD(DELTA)); const HA = acosD(cosH); const fajrMin = Math.floor((TT - HA/15 + 10/60) * 60); // +10min ihtiyati const h=Math.floor(fajrMin/60), m=fajrMin%60; return String(h).padStart(2,'0')+':'+String(m).padStart(2,'0'); } // Probe longitud 103.0 β†’ 104.2, lat tetap 1.55, tz=8 // Sasaran: 06:03 (JHR02, 18 Mac 2026) console.log('--- Probe Longitud (lat=1.55, tz=8) ---'); for(let lng=103.0; lng<=104.2; lng+=0.05){ console.log(`lng=${lng.toFixed(2)} β†’ Subuh=${calcFajr(1.55,lng,8)} [sasaran 06:03]`); }