UNPKG

prayertiming

Version:

A small library to calculate muslim prayer times based on coordinates and timezone

2 lines (1 loc) 6.8 kB
!function(t,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports):"function"==typeof define&&define.amd?define(["exports"],a):a((t="undefined"!=typeof globalThis?globalThis:t||self).prayertiming={})}(this,(function(t){"use strict";const a={MWL:{name:"Muslim World League",params:{fajr:18,isha:17}},ISNA:{name:"Islamic Society of North America (ISNA)",params:{fajr:15,isha:15}},MF:{name:"Muslims of France (MF)",params:{fajr:12,isha:12}},Egypt:{name:"Egyptian General Authority of Survey",params:{fajr:19.5,isha:17.5}},Makkah:{name:"Umm Al-Qura University, Makkah",params:{fajr:18.5,isha:"90 min"}},Karachi:{name:"University of Islamic Sciences, Karachi",params:{fajr:18,isha:18}},Tehran:{name:"Institute of Geophysics, University of Tehran",params:{fajr:17.7,isha:14,maghrib:4.5,midnight:"Jafari"}},Jafari:{name:"Shia Ithna-Ashari, Leva Institute, Qum",params:{fajr:16,isha:14,maghrib:4,midnight:"Jafari"}},JAKIM:{name:"Jabatan Kemajuan Islam Malaysia",params:{fajr:20,isha:18}},MCW:{name:"Moonsighting Committee Worldwide",params:{fajr:18,isha:18}}},n={imsak:5,fajr:5,sunrise:6,dhuhr:12,asr:13,asrHanafi:14,sunset:18,maghrib:18,isha:18,midnight:0},e={Standard:"Standard",Jafari:"Jafari"},i={imsak:"10 min",dhuhr:"0 min",maghrib:"0 min",midnight:"Standard",highLats:"NightMiddle"},r={imsak:0,fajr:0,sunrise:0,dhuhr:0,asr:0,asrHanafi:0,sunset:0,maghrib:0,isha:0,midnight:0},s={"24h":"24h","12h":"12h",Float:"Float"},o={Standard:1,Hanafi:2};function h(t){return t*Math.PI/180}function m(t){return 180*t/Math.PI}function c(t){return Math.sin(h(t))}function u(t){return Math.cos(h(t))}function f(t,a){let n=t;return n-=a*Math.floor(t/a),n<0?n+a:n}function g(t){return f(t,360)}function l(t){return f(t,24)}function d(t){const a=new Date(t.year,t.month-1,t.day,12,0,0,0),n=a.toUTCString(),e=new Date(n.substring(0,n.lastIndexOf(" ")-1));return(a.getTime()-e.getTime())/36e5}function j({year:t}){const a=d({year:t,month:0,day:1}),n=d({year:t,month:6,day:1});return Math.min(a,n)}function b(t){return Number(String(t||"").split(/[^0-9.+-]/)[0])}function M(t){const a=t-2451545+8e-4,n=g(357.529+.98560028*a),e=g(280.459+.98564736*a),i=g(e+1.915*c(n)+.02*c(2*n)),r=23.439-36e-8*a;var s,o;const h=e/15-l((s=u(r)*c(i),o=u(i),m(Math.atan2(s,o))/15));var f;return{declination:(f=c(r)*c(i),m(Math.asin(f))),equation:h}}function y(t,a){return l(12-M(a+t).equation)}function D({angle:t,time:a,direction:n,jDate:e,lat:i}){const r=M(e+a).declination,s=y(a,e),o=1/15*(h=(-c(t)-c(r)*c(i))/(u(r)*u(i)),m(Math.acos(h)));var h;return s+("ccw"===n?-o:o)}function p(t){return.833+.0347*Math.sqrt(t)}function k({factor:t,time:a,jDate:n,lat:e,direction:i}){const r=M(n+a).declination;var s,o;return D({angle:(s=t+(o=Math.abs(e-r),Math.tan(h(o))),-m(Math.atan(1/s))),time:a,direction:i,jDate:n,lat:e})}function w(t){return o[t]||b(t)}function O(t){return-1!==String(t||"").indexOf("min")}function v(t,a){return l(a-t)}function N({time:t,base:a,angle:n,night:e,direction:i,settings:r}){let s=t;const o=function({angle:t,night:a,settings:n}){const e=n.highLats;let i=.5;return"AngleBased"===e&&(i=1/60*t),"OneSeventh"===e&&(i=1/7),i*a}({angle:n,night:e,settings:r}),h="ccw"===i?v(t,a):v(a,t);return(Number.isNaN(t)||h>o)&&(s=a+("ccw"===i?-o:o)),s}function S({times:t,settings:a,timeZone:n,long:e}){const i=Object.assign({},a);let r=Object.assign({},t);return Object.keys(r).forEach((t=>{r[t]+=n-e/15})),"None"!==i.highLats&&(r=function({times:t,settings:a}){const n=Object.assign({},a),e=Object.assign({},t),i=v(t.sunset,t.sunrise);return e.imsak=N({settings:a,time:t.imsak,base:t.sunrise,angle:b(n.imsak),night:i,direction:"ccw"}),e.fajr=N({settings:a,time:t.fajr,base:t.sunrise,angle:b(n.fajr),night:i,direction:"ccw"}),e.isha=N({settings:a,time:t.isha,base:t.sunset,angle:b(n.isha),night:i}),e.maghrib=N({settings:a,time:t.maghrib,base:t.sunset,angle:b(n.maghrib),night:i}),e}({times:r,settings:a})),O(i.imsak)&&(r.imsak=r.fajr-b(i.imsak)/60),O(i.maghrib)&&(r.maghrib=r.sunset+b(i.maghrib)/60),O(i.isha)&&(r.isha=r.maghrib+b(i.isha)/60),r.dhuhr+=b(i.dhuhr)/60,r}function I(t){return t<10?`0${t}`:t}function F({times:t,timeFormat:a}){const n=Object.assign({},t);return Object.keys(t).forEach((e=>{const i=function(t,a,n){let e=t;if(Number.isNaN(t))return"--:--";if("Float"===a)return t;e=l(e+.5/60);const i=Math.floor(e),r=Math.floor(60*(e-i)),s="12h"===a?["am","pm"][i<12?0:1]:"";return`${"24h"===a?I(i):(i+12-1)%12+1}:${I(r)}${s?` ${s}`:""}`}(t[e]||0,a);n[e]=i})),n}function T({times:t,jDate:a,lat:n,elv:e,settings:i}){const r=function(t){const a=Object.assign({},t);return Object.keys(a).forEach((t=>{a[t]/=24})),a}(t);return{imsak:D({jDate:a,lat:n,angle:b(i.imsak),time:r.imsak,direction:"ccw"}),fajr:D({jDate:a,lat:n,angle:b(i.fajr),time:r.fajr,direction:"ccw"}),sunrise:D({jDate:a,lat:n,angle:p(e),time:r.sunrise,direction:"ccw"}),dhuhr:y(r.dhuhr,a),asr:k({jDate:a,lat:n,factor:w("Standard"),time:r.asr}),asrHanafi:k({jDate:a,lat:n,factor:w("Hanafi"),time:r.asr}),sunset:D({jDate:a,lat:n,angle:p(e),time:r.sunset}),maghrib:D({jDate:a,lat:n,angle:b(i.maghrib),time:r.maghrib}),isha:D({jDate:a,lat:n,angle:b(i.isha),time:r.isha})}}function U({long:t,lat:o,timezone:h,dst:m,elv:c=0,date:u=new Date,timeFormat:f=s["24h"],method:g="MWL",config:l={}}){if(!function(t){return!(!t||"Invalid Date"===t)&&t instanceof Date&&"[object Date]"===Object.prototype.toString.call(t)&&!Number.isNaN(t.getMonth())}(u))throw new Error("Invalid Date");const b={year:u.getFullYear(),month:u.getMonth()+1,day:u.getDate()},M=m||function(t){return Number(d(t)!==j(t))}(b),y=Object.assign(Object.assign(Object.assign({},i),a[g].params),l),D=function(t,a,n){let e=t,i=a;a<=2&&(e-=1,i+=12);const r=Math.floor(e/100),s=2-r+Math.floor(r/4);return Math.floor(365.25*(e+4716))+Math.floor(30.6001*(i+1))+n+s-1524.5}(b.year,b.month,b.day)-t/360;let p=h||j(b),k=Object.assign({},n);p=Number(p)+(Number(M)?1:0),k=T({times:k,jDate:D,lat:o,elv:c,settings:y}),k=S({times:k,timeZone:p,long:t,settings:y}),k.midnight=y.midnight===e.Jafari?k.sunset+v(k.sunset,k.fajr)/2:k.sunset+v(k.sunset,k.sunrise)/2,k=function(t,a){const n=Object.assign({},t);return Object.keys(n).forEach((t=>{n[t]+=(a[t]||0)/60})),n}(k,r);const w=F({times:k,timeFormat:f});return Object.assign({date:u,method:g},w)}t.CalculationMethods=a,t.TimeFormats=s,t.getByDay=U,t.getByMonth=function({long:t,lat:a,timezone:n,dst:e,elv:i=0,month:r=(new Date).getMonth(),year:o=(new Date).getFullYear(),timeFormat:h=s["24h"],method:m="MWL",config:c={}}){if(r<0||r>11)throw new Error("Invalid Month");const u=function(t,a){const n=new Date(Date.UTC(a,t,1)),e=[];for(;n.getUTCMonth()===t;)e.push(new Date(n)),n.setUTCDate(n.getUTCDate()+1);return e}(r,o),f=[];for(let r=0,s=u.length;r<s;r++)f.push(U({long:t,lat:a,timezone:n,dst:e,elv:i,date:u[r],timeFormat:h,method:m,config:c}));return f}}));