Perhitungan Falaqiyah Al-Hikmah
سر الوقت — Rahasia Waktu
— Shams al-Ma‘ārif
🌞 Penguasa Hari: ...
⏳ Planet Jam Aktif: ...
🕒 ...
☀ Pergantian Penguasa Hari: ...
Durasi Jam Sa'at: memuat...
✦ Coba klik planet di langit untuk melihat info energinya ✦
TUNGGULAH SEJENAK HINGGA TABIR FALAK TERBUKA...
Donasi bersifat sukarela untuk biaya sistem, dan akan kami tampilkan di sini.
Terima kasih atas kunjungannya dan partisipasinya.
"Langit dan waktu adalah cermin ketetapan, tempat ruh menapaki garis takdir."
Untuk mendapat Kode Rahasia, silakan donasi seikhlasnya. Anda akan menerima Kode via WhatsApp setelah mengirim bukti transfer.
Seabank: 901311854079 (Endri)
Dana: 085173262649 (Empi Sopiah)
✦ Coba klik planet di langit untuk melihat info energinya ✦
/* FalaqTimesAdvanced.js - Versi lanjutan: auratic highlights (sa'at 1/2/3), JSON output, overrides - Works offline (no external libs). Compatible with Acode/local. - Auto-uses existing page location vars if present. */ const FalaqTimesAdvanced = (function(){ // ---------- Utilities ---------- function toRad(d){ return d*Math.PI/180; } function toDeg(r){ return r*180/Math.PI; } function fixAngle(a){ return (a%360+360)%360; } function pad(n){ return (n<10? '0':'') + n; } // Julian / NOAA helpers (same robust algo as before) function dateToJulian(date){ const y = date.getUTCFullYear(); const m = date.getUTCMonth() + 1; const D = date.getUTCDate() + (date.getUTCHours() + date.getUTCMinutes()/60 + date.getUTCSeconds()/3600)/24; let A = Math.floor(y/100); let B = 2 - A + Math.floor(A/4); let Y = y; let M = m; if (m <= 2) { Y = y - 1; M = m + 12; } const JD = Math.floor(365.25*(Y+4716)) + Math.floor(30.6001*(M+1)) + D + B - 1524.5; return JD; } function julianCenturies(jd){ return (jd - 2451545.0) / 36525.0; } function geomMeanLongSun(T){ return fixAngle(280.46646 + T*(36000.76983 + T*0.0003032)); } function geomMeanAnomalySun(T){ return 357.52911 + T*(35999.05029 - 0.0001537*T); } function eccentricityEarthOrbit(T){ return 0.016708634 - T*(0.000042037 + 0.0000001267*T); } function sunEqOfCenter(T,M){ const Mr = toRad(M); return Math.sin(Mr)*(1.914602 - T*(0.004817 + 0.000014*T)) + Math.sin(2*Mr)*(0.019993 - 0.000101*T) + Math.sin(3*Mr)*0.000289; } function sunTrueLong(L0,C){ return L0 + C; } function sunApparentLong(T,theta){ const omega = 125.04 - 1934.136 * T; return theta - 0.00569 - 0.00478 * Math.sin(toRad(omega)); } function meanObliquityOfEcliptic(T){ return 23 + (26 + ((21.448 - T*(46.815 + T*(0.00059 - T*0.001813))))/60)/60; } function obliquityCorrection(T, eps0){ const omega = 125.04 - 1934.136 * T; return eps0 + 0.00256 * Math.cos(toRad(omega)); } function sunDeclination(eps, lambda){ return toDeg(Math.asin(Math.sin(toRad(eps)) * Math.sin(toRad(lambda)))); } function eqOfTime(T, L0, e, M, eps) { const y = Math.tan(toRad(eps/2)) * Math.tan(toRad(eps/2)); const L0r = toRad(L0), Mr = toRad(M); const term1 = y * Math.sin(2*L0r); const term2 = -2 * e * Math.sin(Mr); const term3 = 4 * e * y * Math.sin(Mr) * Math.cos(2*L0r); const term4 = -0.5 * y*y * Math.sin(4*L0r); const term5 = -1.25 * e*e * Math.sin(2*Mr); return 4 * toDeg(term1 + term2 + term3 + term4 + term5); // minutes } function hourAngleSunrise(lat, decl){ const latR = toRad(lat), declR = toRad(decl); const HA = Math.acos( Math.cos(toRad(90.833)) / (Math.cos(latR)*Math.cos(declR)) - Math.tan(latR)*Math.tan(declR) ); return toDeg(HA); } function computeSunriseSunsetUTC(dateLocalMidnightUTC, lat, lng){ const jd = dateToJulian(dateLocalMidnightUTC); const T = julianCenturies(jd); const L0 = geomMeanLongSun(T); const M = geomMeanAnomalySun(T); const e = eccentricityEarthOrbit(T); const C = sunEqOfCenter(T, M); const theta = sunTrueLong(L0, C); const lambda = sunApparentLong(T, theta); const eps0 = meanObliquityOfEcliptic(T); const eps = obliquityCorrection(T, eps0); const decl = sunDeclination(eps, lambda); const eqt = eqOfTime(T, L0, e, M, eps); const ha = hourAngleSunrise(lat, decl); const solarNoonUTC = (720 - 4*lng - eqt); const sunriseUTCmin = solarNoonUTC - ha*4; const sunsetUTCmin = solarNoonUTC + ha*4; return { sunriseUTCmin, sunsetUTCmin, decl, eqt, solarNoonUTC }; } function minutesToLocalDate(baseDateLocal, minutesUTC){ const tzOffsetMin = baseDateLocal.getTimezoneOffset(); const utcMidnight = new Date(Date.UTC(baseDateLocal.getFullYear(), baseDateLocal.getMonth(), baseDateLocal.getDate(), 0, 0, 0) - tzOffsetMin*60000); const dt = new Date(utcMidnight.getTime() + Math.round(minutesUTC*60000)); return dt; } function formatHM(d){ return pad(d.getHours()) + ':' + pad(d.getMinutes()); } // ---------- Helper: find location from page globals ---------- function findLocationFromPage(){ // common names developers use for stored user location if (window.USER_LAT && window.USER_LNG) return { lat: +window.USER_LAT, lng: +window.USER_LNG }; if (window.userLat && window.userLng) return { lat: +window.userLat, lng: +window.userLng }; if (window.userLocation && typeof window.userLocation === 'object' && window.userLocation.lat && window.userLocation.lng) return { lat: +window.userLocation.lat, lng: +window.userLocation.lng }; // check dataset on body or meta tags optionally const body = document.body; if (body && body.dataset && body.dataset.lat && body.dataset.lng) return { lat: +body.dataset.lat, lng: +body.dataset.lng }; // not found -> return null (caller may fallback to geolocation) return null; } // Build saats with configurable length (minutes) function buildSaatsWithLength(sunriseDate, sunsetDate, hourLengthMinutes){ const saats = []; const msLen = hourLengthMinutes * 60000; for (let i=0;i<12;i++){ const start = new Date(sunriseDate.getTime() + i*msLen); const end = new Date(sunriseDate.getTime() + (i+1)*msLen); saats.push({ idx: i+1, start, end, origin: 'sunrise' }); } for (let i=0;i<12;i++){ const start = new Date(sunsetDate.getTime() + i*msLen); const end = new Date(sunsetDate.getTime() + (i+1)*msLen); saats.push({ idx: 13+i, start, end, origin: 'sunset' }); } return saats; } // Render table with auratic highlights (gold for sa'at 1..3) function render(container, info, opts){ const { lat, lng, sunriseDate, sunsetDate, saats, dateStr } = info; const el = (typeof container === 'string') ? document.getElementById(container) : container; if (!el) return; // style variables (keemasan auratik) const goldStyle = "background:linear-gradient(90deg,#fff6d1,#f9e0a6);color:#1b1b12;padding:4px 8px;border-radius:6px;font-weight:700;"; const faint = "color:rgba(255,255,255,0.9);"; let html = ''; html += `
| Sa'at | Mulai | Selesai | Catatan |
|---|---|---|---|
| Sa'at ${s.idx} | ${formatHM(s.start)} | ${formatHM(s.end)} | ${note} |
Catatan: Sa'at 1 = Puncak syurūq (penguasa hari). Sa'at 2 & 3 diberi prioritas sekunder & tersier.
`; html += ``; el.innerHTML = html; } // Build a JSON structure for external usage function buildOutputJson(info, meta){ // info contains saats etc. return { dateLocal: meta.dateLocalISO, lat: info.lat, lng: info.lng, sunrise: info.sunriseDate.toISOString(), sunset: info.sunsetDate.toISOString(), hourLengthMinutes: meta.hourLengthMinutes, saats: info.saats.map(s => ({ index: s.idx, startIso: s.start.toISOString(), endIso: s.end.toISOString(), startLocal: `${pad(s.start.getHours())}:${pad(s.start.getMinutes())}`, endLocal: `${pad(s.end.getHours())}:${pad(s.end.getMinutes())}`, origin: s.origin })) }; } // Main compute function with overrides and callback async function computeAndRenderAdvanced(opts){ // opts: { containerId, dateLocal (Date), hourLengthMinutes, overrideSunriseIso, overrideSunsetIso, onJson (fn), showJsonBlock } const containerId = opts.containerId || 'falaq-times'; const container = (typeof containerId === 'string') ? document.getElementById(containerId) : containerId; if (!container) { console.warn('FalaqTimesAdvanced: container not found'); return; } // Find location from page first let loc = findLocationFromPage(); if (!loc && opts.forceUsePageLocation) { container.innerHTML = `
`; return; } if (!loc) { // fallback to geolocation if (!navigator.geolocation) { container.innerHTML = `
`; return; } try { const pos = await new Promise((res, rej) => navigator.geolocation.getCurrentPosition(res, rej, { enableHighAccuracy:true, timeout:30000 })); loc = { lat: pos.coords.latitude, lng: pos.coords.longitude }; } catch (e) { container.innerHTML = `
`; return; } } const dateLocal = opts.dateLocal instanceof Date ? opts.dateLocal : new Date(); const hourLengthMinutes = (typeof opts.hourLengthMinutes === 'number' && opts.hourLengthMinutes>0) ? opts.hourLengthMinutes : 60; // If user provided override sunrise/sunset (ISO strings), use them; else compute let sunriseDateLocal, sunsetDateLocal; if (opts.overrideSunriseIso && opts.overrideSunsetIso) { sunriseDateLocal = new Date(opts.overrideSunriseIso); sunsetDateLocal = new Date(opts.overrideSunsetIso); } else { // Compute using NOAA algorithm // Build UTC midnight Date for that local date: const utcYear = dateLocal.getUTCFullYear(); const utcMonth = dateLocal.getUTCMonth(); const utcDay = dateLocal.getUTCDate(); const dateUTCmidnight = new Date(Date.UTC(utcYear, utcMonth, utcDay, 0, 0, 0)); const sun = computeSunriseSunsetUTC(dateUTCmidnight, loc.lat, loc.lng); if (isNaN(sun.sunriseUTCmin) || isNaN(sun.sunsetUTCmin)) { container.innerHTML = `
`; return; } sunriseDateLocal = minutesToLocalDate(dateLocal, sun.sunriseUTCmin); sunsetDateLocal = minutesToLocalDate(dateLocal, sun.sunsetUTCmin); } // Build saats with configurable length (minutes) const saats = buildSaatsWithLength(sunriseDateLocal, sunsetDateLocal, hourLengthMinutes); const dateStr = dateLocal.toLocaleDateString(); // Render HTML render(container, { lat: loc.lat, lng: loc.lng, sunriseDate: sunriseDateLocal, sunsetDate: sunsetDateLocal, saats, dateStr }, { showJsonBlock: !!opts.showJsonBlock }); // Build JSON const meta = { dateLocalISO: dateLocal.toISOString(), hourLengthMinutes }; const outJson = buildOutputJson({ lat: loc.lat, lng: loc.lng, sunriseDate: sunriseDateLocal, sunsetDate: sunsetDateLocal, saats }, meta); // Post JSON to callback if present if (typeof opts.onJson === 'function') { try { opts.onJson(outJson); } catch(e){ console.warn('onJson callback error', e); } } // Also write JSON to details block if requested if (opts.showJsonBlock) { const jsonId = (typeof containerId === 'string' ? containerId + '-json' : 'falaq-json'); const pre = document.getElementById(jsonId); if (pre) pre.textContent = JSON.stringify(outJson, null, 2); } return outJson; } // Public API return { init: function(initOpts){ // initOpts defaults const opts = Object.assign({ containerId: 'falaq-times', dateLocal: new Date(), hourLengthMinutes: 60, overrideSunriseIso: null, overrideSunsetIso: null, onJson: null, showJsonBlock: false, forceUsePageLocation:false }, initOpts || {}); // initial placeholder const container = (typeof opts.containerId === 'string') ? document.getElementById(opts.containerId) : opts.containerId; if (!container) { console.warn('FalaqTimesAdvanced: container not found'); return; } container.innerHTML = `
`; // compute computeAndRenderAdvanced(opts).then(result => { // result is JSON if success // optionally you can handle result here }).catch(err => { console.error(err); }); }, computeForDate: function(opts){ // same options as init but required: dateLocal return computeAndRenderAdvanced(opts); } }; })(); // Inisialisasi: tampilkan di div id="falaq-times" FalaqTimesAdvanced.init({ containerId: 'falaq-times', hourLengthMinutes: 60, // biasanya 60; ubah kalau mau showJsonBlock: true, // tampilkan JSON (bisa dimatikan) // forceUsePageLocation: false, // aktifkan kalau mau paksa pakai lokasi page saja onJson: function(json){ console.log('Falaq JSON', json); } });
Hari: Zuhrah (Jum'at)
Syurūq (puncak): --:--
| Sa'at 1 (Puncak) | --:-- – --:-- |
| Sa'at 2 (Sekunder) | --:-- – --:-- |
| Sa'at 3 (Tersier) | --:-- – --:-- |
/* FalaqTimesAdvanced - chunk 1/4 */ const FalaqTimesAdvanced = (function(){ function toRad(d){ return d*Math.PI/180; } function toDeg(r){ return r*180/Math.PI; } function fixAngle(a){ return (a%360+360)%360; } function pad(n){ return (n<10? '0':'') + n; } function dateToJulian(date){ const y = date.getUTCFullYear(); const m = date.getUTCMonth() + 1; const D = date.getUTCDate() + (date.getUTCHours() + date.getUTCMinutes()/60 + date.getUTCSeconds()/3600)/24; let A = Math.floor(y/100); let B = 2 - A + Math.floor(A/4); let Y = y; let M = m; if (m <= 2) { Y = y - 1; M = m + 12; } const JD = Math.floor(365.25*(Y+4716)) + Math.floor(30.6001*(M+1)) + D + B - 1524.5; return JD; } function julianCenturies(jd){ return (jd - 2451545.0) / 36525.0; } function geomMeanLongSun(T){ return fixAngle(280.46646 + T*(36000.76983 + T*0.0003032)); } function geomMeanAnomalySun(T){ return 357.52911 + T*(35999.05029 - 0.0001537*T); } function eccentricityEarthOrbit(T){ return 0.016708634 - T*(0.000042037 + 0.0000001267*T); } function sunEqOfCenter(T,M){ const Mr = toRad(M); return Math.sin(Mr)*(1.914602 - T*(0.004817 + 0.000014*T)) + Math.sin(2*Mr)*(0.019993 - 0.000101*T) + Math.sin(3*Mr)*0.000289; } function sunTrueLong(L0,C){ return L0 + C; } function sunApparentLong(T,theta){ const omega = 125.04 - 1934.136 * T; return theta - 0.00569 - 0.00478 * Math.sin(toRad(omega)); } function meanObliquityOfEcliptic(T){ return 23 + (26 + ((21.448 - T*(46.815 + T*(0.00059 - T*0.001813))))/60)/60; } function obliquityCorrection(T, eps0){ const omega = 125.04 - 1934.136 * T; return eps0 + 0.00256 * Math.cos(toRad(omega)); } function sunDeclination(eps, lambda){ return toDeg(Math.asin(Math.sin(toRad(eps)) * Math.sin(toRad(lambda)))); } function eqOfTime(T, L0, e, M, eps) { const y = Math.tan(toRad(eps/2)) * Math.tan(toRad(eps/2)); const L0r = toRad(L0), Mr = toRad(M); const term1 = y * Math.sin(2*L0r); const term2 = -2 * e * Math.sin(Mr); const term3 = 4 * e * y * Math.sin(Mr) * Math.cos(2*L0r); const term4 = -0.5 * y*y * Math.sin(4*L0r); const term5 = -1.25 * e*e * Math.sin(2*Mr); return 4 * toDeg(term1 + term2 + term3 + term4 + term5); // minutes } function hourAngleSunrise(lat, decl){ const latR = toRad(lat), declR = toRad(decl); const HA = Math.acos( Math.cos(toRad(90.833)) / (Math.cos(latR)*Math.cos(declR)) - Math.tan(latR)*Math.tan(declR) ); return toDeg(HA); } function computeSunriseSunsetUTC(dateLocalMidnightUTC, lat, lng){ const jd = dateToJulian(dateLocalMidnightUTC); const T = julianCenturies(jd); const L0 = geomMeanLongSun(T); const M = geomMeanAnomalySun(T); const e = eccentricityEarthOrbit(T); const C = sunEqOfCenter(T, M); const theta = sunTrueLong(L0, C); const lambda = sunApparentLong(T, theta); const eps0 = meanObliquityOfEcliptic(T); const eps = obliquityCorrection(T, eps0); const decl = sunDeclination(eps, lambda); const eqt = eqOfTime(T, L0, e, M, eps); const ha = hourAngleSunrise(lat, decl); const solarNoonUTC = (720 - 4*lng - eqt); const sunriseUTCmin = solarNoonUTC - ha*4; const sunsetUTCmin = solarNoonUTC + ha*4; return { sunriseUTCmin, sunsetUTCmin, decl, eqt, solarNoonUTC }; } function minutesToLocalDate(baseDateLocal, minutesUTC){ const tzOffsetMin = baseDateLocal.getTimezoneOffset(); const utcMidnight = new Date( Date.UTC( baseDateLocal.getFullYear(), baseDateLocal.getMonth(), baseDateLocal.getDate(), 0,0,0 ) - tzOffsetMin*60000 ); const dt = new Date(utcMidnight.getTime() + Math.round(minutesUTC*60000)); return dt; } function formatHM(d){ const hh = d.getHours(); const mm = d.getMinutes(); return (hh<10?"0":"")+hh+":"+(mm<10?"0":"")+mm; } /* ------------------------- Cari lokasi dari halaman ------------------------- */ function findLocationFromPage(){ if(window.USER_LAT && window.USER_LNG) return {lat:+window.USER_LAT,lng:+window.USER_LNG}; if(window.userLat && window.userLng) return {lat:+window.userLat,lng:+window.userLng}; if(window.userLocation && typeof window.userLocation==="object" && window.userLocation.lat && window.userLocation.lng) return {lat:+window.userLocation.lat,lng:+window.userLocation.lng}; const body = document.body; if(body && body.dataset && body.dataset.lat && body.dataset.lng) return {lat:+body.dataset.lat,lng:+body.dataset.lng}; return null; } /* ----------------------- Bangun Sa'at siang/malam ----------------------- */ function buildSaatsWithLength(sunriseDate, sunsetDate, hourLengthMinutes){ const saats = []; const msLen = hourLengthMinutes * 60000; // Sa'at 1–12 (siang) for(let i=0; i<12; i++){ const start = new Date(sunriseDate.getTime() + i*msLen); const end = new Date(sunriseDate.getTime() + (i+1)*msLen); saats.push({idx:i+1, start, end, origin:"sunrise"}); } // Sa'at 13–24 (malam) for(let i=0; i<12; i++){ const start = new Date(sunsetDate.getTime() + i*msLen); const end = new Date(sunsetDate.getTime() + (i+1)*msLen); saats.push({idx:13+i, start, end, origin:"sunset"}); } return saats; } /* ----------------------- HTML render utama ----------------------- */ function render(container, info, opts){ const { lat, lng, sunriseDate, sunsetDate, saats, dateStr } = info; const el = (typeof container==="string") ? document.getElementById(container) : container; if(!el) return; const goldStyle = "background:linear-gradient(90deg,#fff6d1,#f9e0a6);color:#1b1b12;padding:4px 8px;border-radius:6px;font-weight:700;"; const softGold = "background:#ffdca8;padding:4px 6px;border-radius:6px;font-weight:700;"; const paleGold = "background:#ffecd6;padding:4px 6px;border-radius:6px;font-weight:600;"; let html = ""; html += `
| Sa'at | Mulai | Selesai | Catatan |
|---|---|---|---|
| Sa'at ${s.idx} | ${formatHM(s.start)} | ${formatHM(s.end)} | ${note} |
Catatan: Sa'at 1 = Puncak Syurūq (penguasa hari). Sa'at 2 & 3 = sekunder & tersier.
`; html += ``; el.innerHTML = html; } /* ----------------------- Build JSON output ----------------------- */ function buildOutputJson(info, meta){ return { dateLocal: meta.dateLocalISO, lat: info.lat, lng: info.lng, sunrise: info.sunriseDate.toISOString(), sunset: info.sunsetDate.toISOString(), hourLengthMinutes: meta.hourLengthMinutes, saats: info.saats.map(s => ({ index: s.idx, startIso: s.start.toISOString(), endIso: s.end.toISOString(), startLocal: formatHM(s.start), endLocal: formatHM(s.end), origin: s.origin })) }; } /* ----------------------- Compute & Render Main ----------------------- */ async function computeAndRenderAdvanced(opts){ // opts: { containerId, dateLocal, hourLengthMinutes, overrideSunriseIso, overrideSunsetIso, onJson, showJsonBlock, forceUsePageLocation } const containerId = opts.containerId || 'falaq-times'; const container = (typeof containerId === 'string') ? document.getElementById(containerId) : containerId; if(!container){ console.warn('FalaqTimesAdvanced: container not found'); return null; } // find location from page let loc = findLocationFromPage(); if(!loc && opts.forceUsePageLocation){ container.innerHTML = `
`; return null; } if(!loc){ if(!navigator.geolocation){ container.innerHTML = `
`; return null; } try { const pos = await new Promise((res, rej) => navigator.geolocation.getCurrentPosition(res, rej, { enableHighAccuracy:true, timeout:30000 })); loc = { lat: pos.coords.latitude, lng: pos.coords.longitude }; } catch(e){ container.innerHTML = `
`; return null; } } const dateLocal = (opts.dateLocal instanceof Date) ? opts.dateLocal : new Date(); const hourLengthMinutes = (typeof opts.hourLengthMinutes === 'number' && opts.hourLengthMinutes>0) ? opts.hourLengthMinutes : 60; // compute sunrise/sunset (or use overrides) let sunriseDateLocal, sunsetDateLocal; if(opts.overrideSunriseIso && opts.overrideSunsetIso){ sunriseDateLocal = new Date(opts.overrideSunriseIso); sunsetDateLocal = new Date(opts.overrideSunsetIso); } else { // build UTC midnight for the dateLocal const utcYear = dateLocal.getUTCFullYear(); const utcMonth = dateLocal.getUTCMonth(); const utcDay = dateLocal.getUTCDate(); const dateUTCmidnight = new Date(Date.UTC(utcYear, utcMonth, utcDay, 0,0,0)); const sun = computeSunriseSunsetUTC(dateUTCmidnight, loc.lat, loc.lng); if(isNaN(sun.sunriseUTCmin) || isNaN(sun.sunsetUTCmin)){ container.innerHTML = `
`; return null; } sunriseDateLocal = minutesToLocalDate(dateLocal, sun.sunriseUTCmin); sunsetDateLocal = minutesToLocalDate(dateLocal, sun.sunsetUTCmin); } // build saats const saats = buildSaatsWithLength(sunriseDateLocal, sunsetDateLocal, hourLengthMinutes); const dateStr = dateLocal.toLocaleDateString(); // render html render(container, { lat: loc.lat, lng: loc.lng, sunriseDate: sunriseDateLocal, sunsetDate: sunsetDateLocal, saats, dateStr }, { showJsonBlock: !!opts.showJsonBlock }); // build json const meta = { dateLocalISO: dateLocal.toISOString(), hourLengthMinutes }; const outJson = buildOutputJson({ lat: loc.lat, lng: loc.lng, sunriseDate: sunriseDateLocal, sunsetDate: sunsetDateLocal, saats }, meta); // callback if(typeof opts.onJson === 'function'){ try{ opts.onJson(outJson); } catch(e){ console.warn('onJson callback error', e); } } // write json block if present if(opts.showJsonBlock){ const jsonId = (typeof containerId === 'string') ? containerId + '-json' : 'falaq-json'; const pre = document.getElementById(jsonId); if(pre) pre.textContent = JSON.stringify(outJson, null, 2); } return outJson; } /* ----------------------- PUBLIC API ----------------------- */ return { init: function(initOpts){ const opts = Object.assign({ containerId: 'falaq-times', dateLocal: new Date(), hourLengthMinutes: 60, overrideSunriseIso: null, overrideSunsetIso: null, onJson: null, showJsonBlock: false, forceUsePageLocation:false }, initOpts || {}); const container = (typeof opts.containerId === 'string') ? document.getElementById(opts.containerId) : opts.containerId; if(!container){ console.warn('FalaqTimesAdvanced: container not found'); return; } container.innerHTML = `
`; computeAndRenderAdvanced(opts) .then(result => {}) .catch(err => console.error(err)); }, computeForDate: function(opts){ // sama seperti init tapi wajib ada dateLocal return computeAndRenderAdvanced(opts); } }; })(); // END FalaqTimesAdvanced
Web Falaqyah ini disusun dengan presisi dan kebenaran,
berdasarkan petunjuk para Guru serta tiga rujukan Falaqyah utama: