diff --git a/.gitignore b/.gitignore index 642271f..dd1bed0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ -coverage/ \ No newline at end of file +coverage/ +.idea \ No newline at end of file diff --git a/Adhan.d.ts b/Adhan.d.ts index 7815bf8..bce905c 100644 --- a/Adhan.d.ts +++ b/Adhan.d.ts @@ -16,7 +16,7 @@ export class PrayerTimes { } export class CalculationParameters { - constructor(fajrAngle: number, ishaAngle: number, ishaInterval: number, methodName?: string) + constructor(methodName: string|undefined|null, fajrAngle: number, ishaAngle: number, ishaInterval: number, maghribAngle: number) readonly method: string; fajrAngle: number; @@ -84,3 +84,8 @@ export enum HighLatitudeRule { TwilightAngle } +export enum PolarCircleResolution { + aqrabBalad, + aqrabYaum, + unresolved +} diff --git a/Adhan.js b/Adhan.js index 0d077b3..d378576 100644 --- a/Adhan.js +++ b/Adhan.js @@ -164,6 +164,9 @@ function DateUtils_dayOfYear(date) { returnedDayOfYear += date.getDate(); return returnedDayOfYear; } +function isValidDate(date) { + return date instanceof Date && !isNaN(date.valueOf()); +} // CONCATENATED MODULE: ./src/Astronomical.js @@ -612,6 +615,98 @@ function Madhab_shadowLength(madhab) { throw "Invalid Madhab"; } } +// CONCATENATED MODULE: ./src/PolarCircleResolution.js + + +const PolarCircleResolution = { + aqrabBalad: 'aqrab-balad', + aqrabYaum: 'aqrab-yaum', + unresolved: 'unresolved' +}; +const LATITUDE_VARIATION_STEP = 0.5; // Degrees to add/remove at each resolution step + +const UNSAFE_LATITUDE = 65; // Based on https://en.wikipedia.org/wiki/Midnight_sun + +const isValidSolarTime = solarTime => solarTime && !isNaN(solarTime.sunrise) && !isNaN(solarTime.sunset); + +const aqrabYaumResolver = (coordinates, date, daysAdded = 1, direction = 1) => { + if (daysAdded > Math.ceil(365 / 2)) { + return null; + } + + const testDate = new Date(date.getTime()); + testDate.setDate(testDate.getDate() + direction * daysAdded); + const tomorrow = dateByAddingDays(testDate, 1); + const solarTime = new SolarTime_SolarTime(testDate, coordinates); + const tomorrowSolarTime = new SolarTime_SolarTime(tomorrow, coordinates); + + if (!isValidSolarTime(solarTime) || !isValidSolarTime(tomorrowSolarTime)) { + return aqrabYaumResolver(coordinates, date, daysAdded + (direction > 0 ? 0 : 1), -direction); + } + + return { + date, + tomorrow, + coordinates, + solarTime, + tomorrowSolarTime + }; +}; + +const aqrabBaladResolver = (coordinates, date, latitude) => { + const solarTime = new SolarTime_SolarTime(date, { ...coordinates, + latitude + }); + const tomorrow = dateByAddingDays(date, 1); + const tomorrowSolarTime = new SolarTime_SolarTime(tomorrow, { ...coordinates, + latitude + }); + + if (!isValidSolarTime(solarTime) || !isValidSolarTime(tomorrowSolarTime)) { + return Math.abs(latitude) >= UNSAFE_LATITUDE ? aqrabBaladResolver(coordinates, date, latitude - Math.sign(latitude) * LATITUDE_VARIATION_STEP) : null; + } + + return { + date, + tomorrow, + coordinates: { + latitude, + longitude: coordinates.longitude + }, + solarTime, + tomorrowSolarTime + }; +}; + +const polarCircleResolvedValues = (resolver, date, coordinates) => { + const defaultReturn = { + date, + tomorrow: dateByAddingDays(date, 1), + coordinates, + solarTime: new SolarTime_SolarTime(date, coordinates), + tomorrowSolarTime: new SolarTime_SolarTime(dateByAddingDays(date, 1), coordinates) + }; + + switch (resolver) { + case PolarCircleResolution.aqrabYaum: + { + return aqrabYaumResolver(coordinates, date) || defaultReturn; + } + + case PolarCircleResolution.aqrabBalad: + { + const { + latitude + } = coordinates; + return aqrabBaladResolver(coordinates, date, latitude - Math.sign(latitude) * LATITUDE_VARIATION_STEP) || defaultReturn; + } + + default: + { + return defaultReturn; + } + } +}; // CONCATENATED MODULE: ./src/PrayerTimes.js @@ -619,6 +714,7 @@ function Madhab_shadowLength(madhab) { + class PrayerTimes_PrayerTimes { constructor(coordinates, date, calculationParameters) { this.coordinates = coordinates; @@ -635,9 +731,24 @@ class PrayerTimes_PrayerTimes { dhuhrTime = new TimeComponents(solarTime.transit).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); sunriseTime = new TimeComponents(solarTime.sunrise).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); var sunsetTime = new TimeComponents(solarTime.sunset).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); - asrTime = new TimeComponents(solarTime.afternoon(Madhab_shadowLength(calculationParameters.madhab))).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); var tomorrow = dateByAddingDays(date, 1); var tomorrowSolarTime = new SolarTime_SolarTime(tomorrow, coordinates); + const polarCircleResolver = calculationParameters.polarCircleResolution; + + if ((!isValidDate(sunriseTime) || !isValidDate(sunsetTime) || isNaN(tomorrowSolarTime.sunrise)) && polarCircleResolver !== PolarCircleResolution.unresolved) { + const resolved = polarCircleResolvedValues(polarCircleResolver, date, coordinates); + this.coordinates = resolved.coordinates; + this.date.setTime(resolved.date.getTime()); + solarTime = resolved.solarTime; + tomorrow = resolved.tomorrow; + tomorrowSolarTime = resolved.tomorrowSolarTime; + const dateComponents = [date.getFullYear(), date.getMonth(), date.getDate()]; + dhuhrTime = new TimeComponents(solarTime.transit).utcDate(...dateComponents); + sunriseTime = new TimeComponents(solarTime.sunrise).utcDate(...dateComponents); + sunsetTime = new TimeComponents(solarTime.sunset).utcDate(...dateComponents); + } + + asrTime = new TimeComponents(solarTime.afternoon(Madhab_shadowLength(calculationParameters.madhab))).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); var tomorrowSunrise = new TimeComponents(tomorrowSolarTime.sunrise).utcDate(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate()); var night = (tomorrowSunrise - sunsetTime) / 1000; fajrTime = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.fajrAngle, false)).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); // special case for moonsighting committee above latitude 55 @@ -783,6 +894,7 @@ const HighLatitudeRule = { // CONCATENATED MODULE: ./src/CalculationParameters.js + class CalculationParameters_CalculationParameters { constructor(methodName, fajrAngle, ishaAngle, ishaInterval, maghribAngle) { this.method = methodName || "Other"; @@ -808,6 +920,7 @@ class CalculationParameters_CalculationParameters { maghrib: 0, isha: 0 }; + this.polarCircleResolution = PolarCircleResolution.unresolved; } nightPortions() { @@ -969,6 +1082,7 @@ class SunnahTimes_SunnahTimes { + const adhan = { Prayer: src_Prayer, Madhab: Madhab, @@ -978,7 +1092,8 @@ const adhan = { CalculationMethod: src_CalculationMethod, PrayerTimes: PrayerTimes_PrayerTimes, SunnahTimes: SunnahTimes_SunnahTimes, - Qibla: qibla + Qibla: qibla, + PolarCircleResolution: PolarCircleResolution }; /* harmony default export */ var Adhan = __webpack_exports__["default"] = (adhan); diff --git a/Adhan.js.map b/Adhan.js.map index 8fb1e00..8ccdebc 100644 --- a/Adhan.js.map +++ b/Adhan.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://adhan/webpack/universalModuleDefinition","webpack://adhan/webpack/bootstrap","webpack://adhan/./src/Coordinates.js","webpack://adhan/./src/MathUtils.js","webpack://adhan/./src/DateUtils.js","webpack://adhan/./src/Astronomical.js","webpack://adhan/./src/SolarCoordinates.js","webpack://adhan/./src/SolarTime.js","webpack://adhan/./src/TimeComponents.js","webpack://adhan/./src/Prayer.js","webpack://adhan/./src/Madhab.js","webpack://adhan/./src/PrayerTimes.js","webpack://adhan/./src/HighLatitudeRule.js","webpack://adhan/./src/CalculationParameters.js","webpack://adhan/./src/CalculationMethod.js","webpack://adhan/./src/Qibla.js","webpack://adhan/./src/SunnahTimes.js","webpack://adhan/./src/Adhan.js"],"names":["Coordinates","constructor","latitude","longitude","degreesToRadians","degrees","Math","PI","radiansToDegrees","radians","normalizeToScale","number","max","floor","unwindAngle","angle","quadrantShiftAngle","round","dateByAddingDays","date","days","year","getFullYear","month","getMonth","day","getDate","hours","getHours","minutes","getMinutes","seconds","getSeconds","Date","dateByAddingMinutes","dateByAddingSeconds","getTime","roundedMinute","getUTCSeconds","offset","dayOfYear","returnedDayOfYear","feb","Astronomical","isLeapYear","months","i","meanSolarLongitude","julianCentury","T","term1","term2","term3","pow","L0","meanLunarLongitude","Lp","ascendingLunarNodeLongitude","term4","Omega","meanSolarAnomaly","M","solarEquationOfTheCenter","meanAnomaly","Mrad","sin","apparentSolarLongitude","meanLongitude","Lambda","meanObliquityOfTheEcliptic","apparentObliquityOfTheEcliptic","Epsilon0","O","cos","meanSiderealTime","JD","Theta","nutationInLongitude","solarLongitude","lunarLongitude","ascendingNode","nutationInObliquity","altitudeOfCelestialBody","observerLatitude","declination","localHourAngle","Phi","delta","H","asin","approximateTransit","siderealTime","rightAscension","L","Theta0","a2","Lw","correctedTransit","previousRightAscension","nextRightAscension","m0","a1","a3","a","interpolateAngles","dm","correctedHourAngle","coordinates","afterTransit","previousDeclination","nextDeclination","h0","d2","d1","d3","H0","acos","m","interpolate","h","y2","y1","y3","n","b","c","julianDay","trunc","x","ceil","Y","D","A","B","i0","i1","seasonAdjustedMorningTwilight","sunrise","abs","d","adjustment","dyy","daysSinceSolstice","seasonAdjustedEveningTwilight","sunset","northernOffset","southernOffset","daysInYear","SolarCoordinates","dPsi","dEpsilon","EpsilonApparent","atan2","apparentSiderealTime","SolarTime","observer","solar","prevSolar","nextSolar","solarAltitude","approxTransit","transit","hourAngle","afternoon","shadowLength","tangent","inverse","tan","atan","TimeComponents","utcDate","UTC","Prayer","Fajr","Sunrise","Dhuhr","Asr","Maghrib","Isha","None","Madhab","Shafi","Hanafi","madhab","PrayerTimes","calculationParameters","solarTime","fajrTime","sunriseTime","dhuhrTime","asrTime","maghribTime","ishaTime","nightFraction","sunsetTime","tomorrow","tomorrowSolarTime","tomorrowSunrise","night","fajrAngle","method","safeFajr","portion","nightPortions","fajr","isNaN","ishaInterval","ishaAngle","safeIsha","isha","maghribAngle","angleBasedMaghrib","fajrAdjustment","adjustments","methodAdjustments","sunriseAdjustment","dhuhrAdjustment","dhuhr","asrAdjustment","asr","maghribAdjustment","maghrib","ishaAdjustment","timeForPrayer","prayer","currentPrayer","nextPrayer","HighLatitudeRule","MiddleOfTheNight","SeventhOfTheNight","TwilightAngle","CalculationParameters","methodName","highLatitudeRule","CalculationMethod","MuslimWorldLeague","params","Egyptian","Karachi","UmmAlQura","Dubai","MoonsightingCommittee","NorthAmerica","Kuwait","Qatar","Singapore","Tehran","Turkey","Other","qibla","makkah","SunnahTimes","prayerTimes","nextDay","nextDayPrayerTimes","nightDuration","middleOfTheNight","lastThirdOfTheNight","adhan","Qibla"],"mappings":"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","file":"Adhan.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"adhan\"] = factory();\n\telse\n\t\troot[\"adhan\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default class Coordinates {\n constructor(latitude, longitude) {\n this.latitude = latitude;\n this.longitude = longitude;\n }\n}\n","export function degreesToRadians(degrees) {\n return (degrees * Math.PI) / 180.0;\n}\n\nexport function radiansToDegrees(radians) {\n return (radians * 180.0) / Math.PI;\n}\n\nexport function normalizeToScale(number, max) {\n return number - (max * (Math.floor(number / max)))\n}\n\nexport function unwindAngle(angle) {\n return normalizeToScale(angle, 360.0);\n}\n\nexport function quadrantShiftAngle(angle) {\n if (angle >= -180 && angle <= 180) {\n return angle;\n }\n\n return angle - (360 * Math.round(angle/360));\n}\n","import Astronomical from './Astronomical';\n\nexport function dateByAddingDays(date, days) {\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate() + days;\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n return new Date(year, month, day, hours, minutes, seconds);\n}\n\nexport function dateByAddingMinutes(date, minutes) {\n return dateByAddingSeconds(date, minutes * 60);\n}\n\nexport function dateByAddingSeconds(date, seconds) {\n return new Date(date.getTime() + (seconds * 1000));\n}\n\nexport function roundedMinute(date) {\n const seconds = date.getUTCSeconds();\n const offset = seconds >= 30 ? 60 - seconds : -1 * seconds;\n return dateByAddingSeconds(date, offset);\n}\n\nexport function dayOfYear(date) {\n let returnedDayOfYear = 0;\n const feb = Astronomical.isLeapYear(date.getFullYear()) ? 29 : 28;\n const months = [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n for (let i = 0; i < date.getMonth(); i++) {\n returnedDayOfYear += months[i];\n }\n\n returnedDayOfYear += date.getDate();\n\n return returnedDayOfYear;\n}\n","import { degreesToRadians, radiansToDegrees, unwindAngle, normalizeToScale, quadrantShiftAngle } from './MathUtils';\nimport { dateByAddingSeconds } from './DateUtils';\n\nconst Astronomical = {\n\n /* The geometric mean longitude of the sun in degrees. */\n meanSolarLongitude: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 163 */\n const term1 = 280.4664567;\n const term2 = 36000.76983 * T;\n const term3 = 0.0003032 * Math.pow(T, 2);\n const L0 = term1 + term2 + term3;\n return unwindAngle(L0);\n },\n\n /* The geometric mean longitude of the moon in degrees. */\n meanLunarLongitude: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = 218.3165;\n const term2 = 481267.8813 * T;\n const Lp = term1 + term2;\n return unwindAngle(Lp);\n },\n\n ascendingLunarNodeLongitude: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = 125.04452;\n const term2 = 1934.136261 * T;\n const term3 = 0.0020708 * Math.pow(T, 2);\n const term4 = Math.pow(T, 3) / 450000;\n const Omega = term1 - term2 + term3 + term4;\n return unwindAngle(Omega);\n },\n\n /* The mean anomaly of the sun. */\n meanSolarAnomaly: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 163 */\n const term1 = 357.52911;\n const term2 = 35999.05029 * T;\n const term3 = 0.0001537 * Math.pow(T, 2);\n const M = term1 + term2 - term3;\n return unwindAngle(M);\n },\n\n /* The Sun's equation of the center in degrees. */\n solarEquationOfTheCenter: function(julianCentury, meanAnomaly) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 164 */\n const Mrad = degreesToRadians(meanAnomaly);\n const term1 = (1.914602 - (0.004817 * T) - (0.000014 * Math.pow(T, 2))) * Math.sin(Mrad);\n const term2 = (0.019993 - (0.000101 * T)) * Math.sin(2 * Mrad);\n const term3 = 0.000289 * Math.sin(3 * Mrad);\n return term1 + term2 + term3;\n },\n\n /* The apparent longitude of the Sun, referred to the\n true equinox of the date. */\n apparentSolarLongitude: function(julianCentury, meanLongitude) {\n const T = julianCentury;\n const L0 = meanLongitude;\n /* Equation from Astronomical Algorithms page 164 */\n const longitude = L0 + Astronomical.solarEquationOfTheCenter(T, Astronomical.meanSolarAnomaly(T));\n const Omega = 125.04 - (1934.136 * T);\n const Lambda = longitude - 0.00569 - (0.00478 * Math.sin(degreesToRadians(Omega)));\n return unwindAngle(Lambda);\n },\n\n /* The mean obliquity of the ecliptic, formula\n adopted by the International Astronomical Union.\n Represented in degrees. */\n meanObliquityOfTheEcliptic: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 147 */\n const term1 = 23.439291;\n const term2 = 0.013004167 * T;\n const term3 = 0.0000001639 * Math.pow(T, 2);\n const term4 = 0.0000005036 * Math.pow(T, 3);\n return term1 - term2 - term3 + term4;\n },\n\n /* The mean obliquity of the ecliptic, corrected for\n calculating the apparent position of the sun, in degrees. */\n apparentObliquityOfTheEcliptic: function(julianCentury, meanObliquityOfTheEcliptic) {\n const T = julianCentury;\n const Epsilon0 = meanObliquityOfTheEcliptic;\n /* Equation from Astronomical Algorithms page 165 */\n const O = 125.04 - (1934.136 * T);\n return Epsilon0 + (0.00256 * Math.cos(degreesToRadians(O)));\n },\n\n /* Mean sidereal time, the hour angle of the vernal equinox, in degrees. */\n meanSiderealTime: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 165 */\n const JD = (T * 36525) + 2451545.0;\n const term1 = 280.46061837;\n const term2 = 360.98564736629 * (JD - 2451545);\n const term3 = 0.000387933 * Math.pow(T, 2);\n const term4 = Math.pow(T, 3) / 38710000;\n const Theta = term1 + term2 + term3 - term4;\n return unwindAngle(Theta)\n },\n\n nutationInLongitude: function(julianCentury, solarLongitude, lunarLongitude, ascendingNode) {\n const L0 = solarLongitude;\n const Lp = lunarLongitude;\n const Omega = ascendingNode;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = (-17.2/3600) * Math.sin(degreesToRadians(Omega));\n const term2 = (1.32/3600) * Math.sin(2 * degreesToRadians(L0));\n const term3 = (0.23/3600) * Math.sin(2 * degreesToRadians(Lp));\n const term4 = (0.21/3600) * Math.sin(2 * degreesToRadians(Omega));\n return term1 - term2 - term3 + term4;\n },\n\n nutationInObliquity: function(julianCentury, solarLongitude, lunarLongitude, ascendingNode) {\n const L0 = solarLongitude;\n const Lp = lunarLongitude;\n const Omega = ascendingNode;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = (9.2/3600) * Math.cos(degreesToRadians(Omega));\n const term2 = (0.57/3600) * Math.cos(2 * degreesToRadians(L0));\n const term3 = (0.10/3600) * Math.cos(2 * degreesToRadians(Lp));\n const term4 = (0.09/3600) * Math.cos(2 * degreesToRadians(Omega));\n return term1 + term2 + term3 - term4;\n },\n\n altitudeOfCelestialBody: function(observerLatitude, declination, localHourAngle) {\n const Phi = observerLatitude;\n const delta = declination;\n const H = localHourAngle;\n /* Equation from Astronomical Algorithms page 93 */\n const term1 = Math.sin(degreesToRadians(Phi)) * Math.sin(degreesToRadians(delta));\n const term2 = Math.cos(degreesToRadians(Phi)) * Math.cos(degreesToRadians(delta)) * Math.cos(degreesToRadians(H));\n return radiansToDegrees(Math.asin(term1 + term2));\n },\n\n approximateTransit: function(longitude, siderealTime, rightAscension) {\n const L = longitude;\n const Theta0 = siderealTime;\n const a2 = rightAscension;\n /* Equation from page Astronomical Algorithms 102 */\n const Lw = L * -1;\n return normalizeToScale((a2 + Lw - Theta0) / 360, 1);\n },\n\n /* The time at which the sun is at its highest point in the sky (in universal time) */\n correctedTransit: function(approximateTransit, longitude, siderealTime, rightAscension, previousRightAscension, nextRightAscension) {\n const m0 = approximateTransit;\n const L = longitude;\n const Theta0 = siderealTime;\n const a2 = rightAscension;\n const a1 = previousRightAscension;\n const a3 = nextRightAscension;\n /* Equation from page Astronomical Algorithms 102 */\n const Lw = L * -1;\n const Theta = unwindAngle((Theta0 + (360.985647 * m0)));\n const a = unwindAngle(Astronomical.interpolateAngles(a2, a1, a3, m0));\n const H = quadrantShiftAngle(Theta - Lw - a);\n const dm = H / -360;\n return (m0 + dm) * 24;\n },\n\n correctedHourAngle: function(approximateTransit, angle, coordinates, afterTransit, siderealTime,\n rightAscension, previousRightAscension, nextRightAscension, declination, previousDeclination, nextDeclination) {\n const m0 = approximateTransit;\n const h0 = angle;\n const Theta0 = siderealTime;\n const a2 = rightAscension;\n const a1 = previousRightAscension;\n const a3 = nextRightAscension;\n const d2 = declination;\n const d1 = previousDeclination;\n const d3 = nextDeclination;\n\n /* Equation from page Astronomical Algorithms 102 */\n const Lw = coordinates.longitude * -1;\n const term1 = Math.sin(degreesToRadians(h0)) - (Math.sin(degreesToRadians(coordinates.latitude)) * Math.sin(degreesToRadians(d2)));\n const term2 = Math.cos(degreesToRadians(coordinates.latitude)) * Math.cos(degreesToRadians(d2));\n const H0 = radiansToDegrees(Math.acos(term1 / term2));\n const m = afterTransit ? m0 + (H0 / 360) : m0 - (H0 / 360);\n const Theta = unwindAngle((Theta0 + (360.985647 * m)));\n const a = unwindAngle(Astronomical.interpolateAngles(a2, a1, a3, m));\n const delta = Astronomical.interpolate(d2, d1, d3, m);\n const H = (Theta - Lw - a);\n const h = Astronomical.altitudeOfCelestialBody(coordinates.latitude, delta, H);\n const term3 = h - h0;\n const term4 = 360 * Math.cos(degreesToRadians(delta)) * Math.cos(degreesToRadians(coordinates.latitude)) * Math.sin(degreesToRadians(H));\n const dm = term3 / term4;\n return (m + dm) * 24;\n },\n\n /* Interpolation of a value given equidistant\n previous and next values and a factor\n equal to the fraction of the interpolated\n point's time over the time between values. */\n interpolate: function(y2, y1, y3, n) {\n /* Equation from Astronomical Algorithms page 24 */\n const a = y2 - y1;\n const b = y3 - y2;\n const c = b - a;\n return y2 + ((n/2) * (a + b + (n * c)));\n },\n\n /* Interpolation of three angles, accounting for\n angle unwinding. */\n interpolateAngles: function(y2, y1, y3, n) {\n /* Equation from Astronomical Algorithms page 24 */\n const a = unwindAngle(y2 - y1);\n const b = unwindAngle(y3 - y2);\n const c = b - a;\n return y2 + ((n/2) * (a + b + (n * c)));\n },\n\n /* The Julian Day for the given Gregorian date components. */\n julianDay: function(year, month, day, hours) {\n /* Equation from Astronomical Algorithms page 60 */\n if (typeof hours === 'undefined') {\n hours = 0;\n }\n\n const trunc = Math.trunc || function (x) { return x < 0 ? Math.ceil(x) : Math.floor(x); };\n\n const Y = trunc(month > 2 ? year : year - 1);\n const M = trunc(month > 2 ? month : month + 12);\n const D = day + (hours / 24);\n\n const A = trunc(Y/100);\n const B = trunc(2 - A + trunc(A/4));\n\n const i0 = trunc(365.25 * (Y + 4716));\n const i1 = trunc(30.6001 * (M + 1));\n\n return i0 + i1 + D + B - 1524.5;\n },\n\n /* Julian century from the epoch. */\n julianCentury: function(julianDay) {\n /* Equation from Astronomical Algorithms page 163 */\n return (julianDay - 2451545.0) / 36525;\n },\n\n /* Whether or not a year is a leap year (has 366 days). */\n isLeapYear: function(year) {\n if (year % 4 != 0) {\n return false;\n }\n\n if (year % 100 == 0 && year % 400 != 0) {\n return false;\n }\n\n return true;\n },\n\n seasonAdjustedMorningTwilight: function(latitude, dayOfYear, year, sunrise) {\n const a = 75 + ((28.65 / 55.0) * Math.abs(latitude));\n const b = 75 + ((19.44 / 55.0) * Math.abs(latitude));\n const c = 75 + ((32.74 / 55.0) * Math.abs(latitude));\n const d = 75 + ((48.10 / 55.0) * Math.abs(latitude));\n\n const adjustment = (function() {\n const dyy = Astronomical.daysSinceSolstice(dayOfYear, year, latitude);\n if ( dyy < 91) {\n return a + ( b - a ) / 91.0 * dyy;\n } else if ( dyy < 137) {\n return b + ( c - b ) / 46.0 * ( dyy - 91 );\n } else if ( dyy < 183 ) {\n return c + ( d - c ) / 46.0 * ( dyy - 137 );\n } else if ( dyy < 229 ) {\n return d + ( c - d ) / 46.0 * ( dyy - 183 );\n } else if ( dyy < 275 ) {\n return c + ( b - c ) / 46.0 * ( dyy - 229 );\n } else {\n return b + ( a - b ) / 91.0 * ( dyy - 275 );\n }\n })();\n\n return dateByAddingSeconds(sunrise, Math.round(adjustment * -60.0));\n },\n\n seasonAdjustedEveningTwilight: function(latitude, dayOfYear, year, sunset) {\n const a = 75 + ((25.60 / 55.0) * Math.abs(latitude));\n const b = 75 + ((2.050 / 55.0) * Math.abs(latitude));\n const c = 75 - ((9.210 / 55.0) * Math.abs(latitude));\n const d = 75 + ((6.140 / 55.0) * Math.abs(latitude));\n\n const adjustment = (function() {\n const dyy = Astronomical.daysSinceSolstice(dayOfYear, year, latitude);\n if ( dyy < 91) {\n return a + ( b - a ) / 91.0 * dyy;\n } else if ( dyy < 137) {\n return b + ( c - b ) / 46.0 * ( dyy - 91 );\n } else if ( dyy < 183 ) {\n return c + ( d - c ) / 46.0 * ( dyy - 137 );\n } else if ( dyy < 229 ) {\n return d + ( c - d ) / 46.0 * ( dyy - 183 );\n } else if ( dyy < 275 ) {\n return c + ( b - c ) / 46.0 * ( dyy - 229 );\n } else {\n return b + ( a - b ) / 91.0 * ( dyy - 275 );\n }\n })();\n\n return dateByAddingSeconds(sunset, Math.round(adjustment * 60.0));\n },\n\n daysSinceSolstice: function(dayOfYear, year, latitude) {\n let daysSinceSolstice = 0;\n const northernOffset = 10;\n const southernOffset = Astronomical.isLeapYear(year) ? 173 : 172;\n const daysInYear = Astronomical.isLeapYear(year) ? 366 : 365;\n\n if (latitude >= 0) {\n daysSinceSolstice = dayOfYear + northernOffset;\n if (daysSinceSolstice >= daysInYear) {\n daysSinceSolstice = daysSinceSolstice - daysInYear;\n }\n } else {\n daysSinceSolstice = dayOfYear - southernOffset;\n if (daysSinceSolstice < 0) {\n daysSinceSolstice = daysSinceSolstice + daysInYear;\n }\n }\n\n return daysSinceSolstice;\n }\n};\n\nexport default Astronomical;","import Astronomical from './Astronomical';\nimport { degreesToRadians, radiansToDegrees, unwindAngle } from './MathUtils';\n\nexport default class SolarCoordinates {\n constructor(julianDay) {\n const T = Astronomical.julianCentury(julianDay);\n const L0 = Astronomical.meanSolarLongitude(T);\n const Lp = Astronomical.meanLunarLongitude(T);\n const Omega = Astronomical.ascendingLunarNodeLongitude(T);\n const Lambda = degreesToRadians(Astronomical.apparentSolarLongitude(T, L0));\n const Theta0 = Astronomical.meanSiderealTime(T);\n const dPsi = Astronomical.nutationInLongitude(T, L0, Lp, Omega);\n const dEpsilon = Astronomical.nutationInObliquity(T, L0, Lp, Omega);\n const Epsilon0 = Astronomical.meanObliquityOfTheEcliptic(T);\n const EpsilonApparent = degreesToRadians(Astronomical.apparentObliquityOfTheEcliptic(T, Epsilon0));\n\n /* declination: The declination of the sun, the angle between\n the rays of the Sun and the plane of the Earth's\n equator, in degrees.\n Equation from Astronomical Algorithms page 165 */\n this.declination = radiansToDegrees(Math.asin(Math.sin(EpsilonApparent) * Math.sin(Lambda)));\n\n /* rightAscension: Right ascension of the Sun, the angular distance on the\n celestial equator from the vernal equinox to the hour circle,\n in degrees.\n Equation from Astronomical Algorithms page 165 */\n this.rightAscension = unwindAngle(radiansToDegrees(Math.atan2(Math.cos(EpsilonApparent) * Math.sin(Lambda), Math.cos(Lambda))));\n\n /* apparentSiderealTime: Apparent sidereal time, the hour angle of the vernal\n equinox, in degrees.\n Equation from Astronomical Algorithms page 88 */\n this.apparentSiderealTime = Theta0 + (((dPsi * 3600) * Math.cos(degreesToRadians(Epsilon0 + dEpsilon))) / 3600);\n }\n}\n\n","import Astronomical from './Astronomical';\nimport { degreesToRadians, radiansToDegrees } from './MathUtils'\nimport SolarCoordinates from './SolarCoordinates';\n\nexport default class SolarTime {\n constructor(date, coordinates) {\n const julianDay = Astronomical.julianDay(date.getFullYear(), date.getMonth() + 1, date.getDate(), 0);\n\n this.observer = coordinates;\n this.solar = new SolarCoordinates(julianDay);\n\n this.prevSolar = new SolarCoordinates(julianDay - 1);\n this.nextSolar = new SolarCoordinates(julianDay + 1);\n\n const m0 = Astronomical.approximateTransit(coordinates.longitude, this.solar.apparentSiderealTime, this.solar.rightAscension);\n const solarAltitude = -50.0 / 60.0;\n\n this.approxTransit = m0;\n\n this.transit = Astronomical.correctedTransit(m0, coordinates.longitude, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension);\n\n this.sunrise = Astronomical.correctedHourAngle(m0, solarAltitude, coordinates, false, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, \n this.solar.declination, this.prevSolar.declination, this.nextSolar.declination);\n\n this.sunset = Astronomical.correctedHourAngle(m0, solarAltitude, coordinates, true, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, \n this.solar.declination, this.prevSolar.declination, this.nextSolar.declination);\n }\n\n hourAngle(angle, afterTransit) {\n return Astronomical.correctedHourAngle(this.approxTransit, angle, this.observer, afterTransit, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, \n this.solar.declination, this.prevSolar.declination, this.nextSolar.declination);\n }\n\n afternoon(shadowLength) {\n // TODO source shadow angle calculation\n const tangent = Math.abs(this.observer.latitude - this.solar.declination);\n const inverse = shadowLength + Math.tan(degreesToRadians(tangent));\n const angle = radiansToDegrees(Math.atan(1.0 / inverse));\n return this.hourAngle(angle, true);\n }\n}\n\n\n","export default class TimeComponents {\n constructor(number) {\n this.hours = Math.floor(number);\n this.minutes = Math.floor((number - this.hours) * 60);\n this.seconds = Math.floor((number - (this.hours + this.minutes / 60)) * 60 * 60);\n return this;\n }\n \n utcDate(year, month, date) {\n return new Date(Date.UTC(year, month, date, this.hours, this.minutes, this.seconds));\n }\n}\n","const Prayer = {\n Fajr: 'fajr',\n Sunrise: 'sunrise',\n Dhuhr: 'dhuhr',\n Asr: 'asr',\n Maghrib: 'maghrib',\n Isha: 'isha',\n None: 'none'\n};\n\nexport default Prayer;","export const Madhab = {\n Shafi: 'shafi',\n Hanafi: 'hanafi'\n};\n\nexport function shadowLength(madhab) {\n switch (madhab) {\n case Madhab.Shafi:\n return 1;\n case Madhab.Hanafi:\n return 2\n default:\n throw \"Invalid Madhab\";\n }\n}\n","import SolarTime from './SolarTime';\nimport TimeComponents from './TimeComponents';\nimport Prayer from './Prayer';\nimport Astronomical from './Astronomical';\nimport { dateByAddingDays, dateByAddingMinutes, dateByAddingSeconds, roundedMinute, dayOfYear } from './DateUtils';\nimport { Madhab, shadowLength } from './Madhab';\n\nexport default class PrayerTimes {\n constructor(coordinates, date, calculationParameters) {\n this.coordinates = coordinates;\n this.date = date;\n this.calculationParameters = calculationParameters;\n\n var solarTime = new SolarTime(date, coordinates);\n\n var fajrTime;\n var sunriseTime;\n var dhuhrTime;\n var asrTime;\n var maghribTime;\n var ishaTime;\n\n var nightFraction;\n\n dhuhrTime = new TimeComponents(solarTime.transit).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n sunriseTime = new TimeComponents(solarTime.sunrise).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n var sunsetTime = new TimeComponents(solarTime.sunset).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n\n asrTime = new TimeComponents(solarTime.afternoon(shadowLength(calculationParameters.madhab))).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n\n var tomorrow = dateByAddingDays(date, 1);\n var tomorrowSolarTime = new SolarTime(tomorrow, coordinates);\n var tomorrowSunrise = new TimeComponents(tomorrowSolarTime.sunrise).utcDate(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate());\n var night = (tomorrowSunrise - sunsetTime) / 1000;\n\n fajrTime = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.fajrAngle, false)).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n\n // special case for moonsighting committee above latitude 55\n if (calculationParameters.method == \"MoonsightingCommittee\" && coordinates.latitude >= 55) {\n nightFraction = night / 7;\n fajrTime = dateByAddingSeconds(sunriseTime, -nightFraction);\n }\n\n var safeFajr = (function () {\n if (calculationParameters.method == \"MoonsightingCommittee\") {\n return Astronomical.seasonAdjustedMorningTwilight(coordinates.latitude, dayOfYear(date), date.getFullYear(), sunriseTime);\n }\n else {\n var portion = calculationParameters.nightPortions().fajr;\n nightFraction = portion * night;\n return dateByAddingSeconds(sunriseTime, -nightFraction);\n }\n })();\n\n if (fajrTime == null || isNaN(fajrTime.getTime()) || safeFajr > fajrTime) {\n fajrTime = safeFajr;\n }\n\n if (calculationParameters.ishaInterval > 0) {\n ishaTime = dateByAddingMinutes(sunsetTime, calculationParameters.ishaInterval);\n } else {\n ishaTime = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.ishaAngle, true)).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n \n // special case for moonsighting committee above latitude 55\n if (calculationParameters.method == \"MoonsightingCommittee\" && coordinates.latitude >= 55) {\n nightFraction = night / 7;\n ishaTime = dateByAddingSeconds(sunsetTime, nightFraction);\n }\n\n var safeIsha = (function () {\n if (calculationParameters.method == \"MoonsightingCommittee\") {\n return Astronomical.seasonAdjustedEveningTwilight(coordinates.latitude, dayOfYear(date), date.getFullYear(), sunsetTime);\n }\n else {\n var portion = calculationParameters.nightPortions().isha;\n nightFraction = portion * night;\n return dateByAddingSeconds(sunsetTime, nightFraction);\n }\n })();\n\n if (ishaTime == null || isNaN(ishaTime.getTime()) || safeIsha < ishaTime) {\n ishaTime = safeIsha;\n }\n }\n\n maghribTime = sunsetTime;\n if (calculationParameters.maghribAngle) {\n let angleBasedMaghrib = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.maghribAngle, true)).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n if (sunsetTime < angleBasedMaghrib && ishaTime > angleBasedMaghrib) {\n maghribTime = angleBasedMaghrib;\n }\n }\n\n var fajrAdjustment = (calculationParameters.adjustments.fajr || 0) + (calculationParameters.methodAdjustments.fajr || 0);\n var sunriseAdjustment = (calculationParameters.adjustments.sunrise || 0) + (calculationParameters.methodAdjustments.sunrise || 0);\n var dhuhrAdjustment = (calculationParameters.adjustments.dhuhr || 0) + (calculationParameters.methodAdjustments.dhuhr || 0);\n var asrAdjustment = (calculationParameters.adjustments.asr || 0) + (calculationParameters.methodAdjustments.asr || 0);\n var maghribAdjustment = (calculationParameters.adjustments.maghrib || 0) + (calculationParameters.methodAdjustments.maghrib || 0);\n var ishaAdjustment = (calculationParameters.adjustments.isha || 0) + (calculationParameters.methodAdjustments.isha || 0);\n\n this.fajr = roundedMinute(dateByAddingMinutes(fajrTime, fajrAdjustment));\n this.sunrise = roundedMinute(dateByAddingMinutes(sunriseTime, sunriseAdjustment));\n this.dhuhr = roundedMinute(dateByAddingMinutes(dhuhrTime, dhuhrAdjustment));\n this.asr = roundedMinute(dateByAddingMinutes(asrTime, asrAdjustment));\n this.maghrib = roundedMinute(dateByAddingMinutes(maghribTime, maghribAdjustment));\n this.isha = roundedMinute(dateByAddingMinutes(ishaTime, ishaAdjustment));\n }\n\n timeForPrayer(prayer) {\n if (prayer == Prayer.Fajr) {\n return this.fajr;\n }\n else if (prayer == Prayer.Sunrise) {\n return this.sunrise;\n }\n else if (prayer == Prayer.Dhuhr) {\n return this.dhuhr;\n }\n else if (prayer == Prayer.Asr) {\n return this.asr;\n }\n else if (prayer == Prayer.Maghrib) {\n return this.maghrib;\n }\n else if (prayer == Prayer.Isha) {\n return this.isha;\n }\n else {\n return null;\n }\n }\n\n currentPrayer(date) {\n if (typeof date === 'undefined') {\n date = new Date();\n }\n if (date >= this.isha) {\n return Prayer.Isha;\n }\n else if (date >= this.maghrib) {\n return Prayer.Maghrib;\n }\n else if (date >= this.asr) {\n return Prayer.Asr;\n }\n else if (date >= this.dhuhr) {\n return Prayer.Dhuhr;\n }\n else if (date >= this.sunrise) {\n return Prayer.Sunrise;\n }\n else if (date >= this.fajr) {\n return Prayer.Fajr;\n }\n else {\n return Prayer.None;\n }\n }\n\n nextPrayer(date) {\n if (typeof date === 'undefined') {\n date = new Date();\n }\n if (date >= this.isha) {\n return Prayer.None;\n }\n else if (date >= this.maghrib) {\n return Prayer.Isha;\n }\n else if (date >= this.asr) {\n return Prayer.Maghrib;\n }\n else if (date >= this.dhuhr) {\n return Prayer.Asr;\n }\n else if (date >= this.sunrise) {\n return Prayer.Dhuhr;\n }\n else if (date >= this.fajr) {\n return Prayer.Sunrise;\n }\n else {\n return Prayer.Fajr;\n }\n }\n}\n\n","const HighLatitudeRule = {\n MiddleOfTheNight: 'middleofthenight',\n SeventhOfTheNight: 'seventhofthenight',\n TwilightAngle: 'twilightangle'\n};\n\nexport default HighLatitudeRule;","import { Madhab } from './Madhab';\nimport HighLatitudeRule from './HighLatitudeRule';\n\nexport default class CalculationParameters {\n constructor(methodName, fajrAngle, ishaAngle, ishaInterval, maghribAngle) {\n this.method = methodName || \"Other\";\n this.fajrAngle = fajrAngle || 0;\n this.ishaAngle = ishaAngle || 0;\n this.ishaInterval = ishaInterval || 0;\n this.maghribAngle = maghribAngle;\n this.madhab = Madhab.Shafi;\n this.highLatitudeRule = HighLatitudeRule.MiddleOfTheNight;\n this.adjustments = { fajr: 0, sunrise: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0 };\n this.methodAdjustments = { fajr: 0, sunrise: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0 };\n }\n\n nightPortions() {\n switch (this.highLatitudeRule) {\n case HighLatitudeRule.MiddleOfTheNight:\n return { fajr: 1 / 2, isha: 1 / 2 };\n case HighLatitudeRule.SeventhOfTheNight:\n return { fajr: 1 / 7, isha: 1 / 7 };\n case HighLatitudeRule.TwilightAngle:\n return { fajr: this.fajrAngle / 60, isha: this.ishaAngle / 60 };\n default:\n throw(`Invalid high latitude rule found when attempting to compute night portions: ${this.highLatitudeRule}`);\n }\n }\n}\n","import CalculationParameters from './CalculationParameters';\n\nconst CalculationMethod = {\n // Muslim World League\n MuslimWorldLeague: function() {\n let params = new CalculationParameters(\"MuslimWorldLeague\", 18, 17);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Egyptian General Authority of Survey\n Egyptian: function() {\n let params = new CalculationParameters(\"Egyptian\", 19.5, 17.5);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // University of Islamic Sciences, Karachi\n Karachi: function() {\n let params = new CalculationParameters(\"Karachi\", 18, 18);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Umm al-Qura University, Makkah\n UmmAlQura: function() {\n return new CalculationParameters(\"UmmAlQura\", 18.5, 0, 90);\n },\n\n // Dubai\n Dubai: function() {\n let params = new CalculationParameters(\"Dubai\", 18.2, 18.2);\n params.methodAdjustments = { sunrise: -3, dhuhr: 3, asr: 3, maghrib: 3 };\n return params;\n },\n\n // Moonsighting Committee\n MoonsightingCommittee: function() {\n let params = new CalculationParameters(\"MoonsightingCommittee\", 18, 18);\n params.methodAdjustments = { dhuhr: 5, maghrib: 3 };\n return params;\n },\n\n // ISNA\n NorthAmerica: function() {\n let params = new CalculationParameters(\"NorthAmerica\", 15, 15);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Kuwait\n Kuwait: function() {\n return new CalculationParameters(\"Kuwait\", 18, 17.5);\n },\n\n // Qatar\n Qatar: function() {\n return new CalculationParameters(\"Qatar\", 18, 0, 90);\n },\n\n // Singapore\n Singapore: function() {\n let params = new CalculationParameters(\"Singapore\", 20, 18);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Institute of Geophysics, University of Tehran\n Tehran: function() {\n let params = new CalculationParameters(\"Tehran\", 17.7, 14, 0, 4.5);\n return params;\n },\n\n // Dianet\n Turkey: function() {\n let params = new CalculationParameters(\"Turkey\", 18, 17);\n params.methodAdjustments = { sunrise: -7, dhuhr: 5, asr: 4, maghrib: 7 };\n return params;\n },\n\n // Other\n Other: function() {\n return new CalculationParameters(\"Other\", 0, 0);\n }\n};\n\nexport default CalculationMethod;","import Coordinates from './Coordinates'\nimport { degreesToRadians, radiansToDegrees, unwindAngle } from './MathUtils'\n\nexport default function qibla(coordinates) {\n const makkah = new Coordinates(21.4225241, 39.8261818);\n\n // Equation from \"Spherical Trigonometry For the use of colleges and schools\" page 50\n const term1 = (\n Math.sin(degreesToRadians(makkah.longitude) -\n degreesToRadians(coordinates.longitude))\n );\n const term2 = (\n Math.cos(degreesToRadians(coordinates.latitude)) *\n Math.tan(degreesToRadians(makkah.latitude))\n );\n const term3 = (\n Math.sin(degreesToRadians(coordinates.latitude)) *\n Math.cos(degreesToRadians(makkah.longitude) -\n degreesToRadians(coordinates.longitude))\n );\n const angle = Math.atan2(term1, term2 - term3);\n\n return unwindAngle(radiansToDegrees(angle));\n}\n","import { dateByAddingDays, dateByAddingSeconds, roundedMinute } from './DateUtils';\nimport PrayerTimes from './PrayerTimes';\n\nexport default class SunnahTimes {\n constructor(prayerTimes) {\n const date = prayerTimes.date;\n const nextDay = dateByAddingDays(date, 1);\n const nextDayPrayerTimes = new PrayerTimes(prayerTimes.coordinates, nextDay, prayerTimes.calculationParameters);\n\n const nightDuration = (nextDayPrayerTimes.fajr.getTime() - prayerTimes.maghrib.getTime()) / 1000.0;\n\n this.middleOfTheNight = roundedMinute(dateByAddingSeconds(prayerTimes.maghrib, nightDuration / 2));\n this.lastThirdOfTheNight = roundedMinute(dateByAddingSeconds(prayerTimes.maghrib, nightDuration * (2 / 3)));\n }\n}\n\n","import Coordinates from './Coordinates';\nimport PrayerTimes from './PrayerTimes';\nimport Prayer from './Prayer';\nimport { Madhab } from './Madhab';\nimport HighLatitudeRule from './HighLatitudeRule';\nimport CalculationMethod from './CalculationMethod';\nimport CalculationParameters from './CalculationParameters';\nimport qibla from './Qibla';\nimport SunnahTimes from './SunnahTimes';\n\nconst adhan = {\n Prayer: Prayer,\n Madhab: Madhab,\n HighLatitudeRule: HighLatitudeRule,\n Coordinates: Coordinates,\n CalculationParameters: CalculationParameters,\n CalculationMethod: CalculationMethod,\n PrayerTimes: PrayerTimes,\n SunnahTimes: SunnahTimes,\n Qibla: qibla\n};\n\nexport default adhan;"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://adhan/webpack/universalModuleDefinition","webpack://adhan/webpack/bootstrap","webpack://adhan/./src/Coordinates.js","webpack://adhan/./src/MathUtils.js","webpack://adhan/./src/DateUtils.js","webpack://adhan/./src/Astronomical.js","webpack://adhan/./src/SolarCoordinates.js","webpack://adhan/./src/SolarTime.js","webpack://adhan/./src/TimeComponents.js","webpack://adhan/./src/Prayer.js","webpack://adhan/./src/Madhab.js","webpack://adhan/./src/PolarCircleResolution.js","webpack://adhan/./src/PrayerTimes.js","webpack://adhan/./src/HighLatitudeRule.js","webpack://adhan/./src/CalculationParameters.js","webpack://adhan/./src/CalculationMethod.js","webpack://adhan/./src/Qibla.js","webpack://adhan/./src/SunnahTimes.js","webpack://adhan/./src/Adhan.js"],"names":["Coordinates","constructor","latitude","longitude","degreesToRadians","degrees","Math","PI","radiansToDegrees","radians","normalizeToScale","number","max","floor","unwindAngle","angle","quadrantShiftAngle","round","dateByAddingDays","date","days","year","getFullYear","month","getMonth","day","getDate","hours","getHours","minutes","getMinutes","seconds","getSeconds","Date","dateByAddingMinutes","dateByAddingSeconds","getTime","roundedMinute","getUTCSeconds","offset","dayOfYear","returnedDayOfYear","feb","Astronomical","isLeapYear","months","i","isValidDate","isNaN","valueOf","meanSolarLongitude","julianCentury","T","term1","term2","term3","pow","L0","meanLunarLongitude","Lp","ascendingLunarNodeLongitude","term4","Omega","meanSolarAnomaly","M","solarEquationOfTheCenter","meanAnomaly","Mrad","sin","apparentSolarLongitude","meanLongitude","Lambda","meanObliquityOfTheEcliptic","apparentObliquityOfTheEcliptic","Epsilon0","O","cos","meanSiderealTime","JD","Theta","nutationInLongitude","solarLongitude","lunarLongitude","ascendingNode","nutationInObliquity","altitudeOfCelestialBody","observerLatitude","declination","localHourAngle","Phi","delta","H","asin","approximateTransit","siderealTime","rightAscension","L","Theta0","a2","Lw","correctedTransit","previousRightAscension","nextRightAscension","m0","a1","a3","a","interpolateAngles","dm","correctedHourAngle","coordinates","afterTransit","previousDeclination","nextDeclination","h0","d2","d1","d3","H0","acos","m","interpolate","h","y2","y1","y3","n","b","c","julianDay","trunc","x","ceil","Y","D","A","B","i0","i1","seasonAdjustedMorningTwilight","sunrise","abs","d","adjustment","dyy","daysSinceSolstice","seasonAdjustedEveningTwilight","sunset","northernOffset","southernOffset","daysInYear","SolarCoordinates","dPsi","dEpsilon","EpsilonApparent","atan2","apparentSiderealTime","SolarTime","observer","solar","prevSolar","nextSolar","solarAltitude","approxTransit","transit","hourAngle","afternoon","shadowLength","tangent","inverse","tan","atan","TimeComponents","utcDate","UTC","Prayer","Fajr","Sunrise","Dhuhr","Asr","Maghrib","Isha","None","Madhab","Shafi","Hanafi","madhab","PolarCircleResolution","aqrabBalad","aqrabYaum","unresolved","LATITUDE_VARIATION_STEP","UNSAFE_LATITUDE","isValidSolarTime","solarTime","aqrabYaumResolver","daysAdded","direction","testDate","setDate","tomorrow","tomorrowSolarTime","aqrabBaladResolver","sign","polarCircleResolvedValues","resolver","defaultReturn","PrayerTimes","calculationParameters","fajrTime","sunriseTime","dhuhrTime","asrTime","maghribTime","ishaTime","nightFraction","sunsetTime","polarCircleResolver","polarCircleResolution","resolved","setTime","dateComponents","tomorrowSunrise","night","fajrAngle","method","safeFajr","portion","nightPortions","fajr","ishaInterval","ishaAngle","safeIsha","isha","maghribAngle","angleBasedMaghrib","fajrAdjustment","adjustments","methodAdjustments","sunriseAdjustment","dhuhrAdjustment","dhuhr","asrAdjustment","asr","maghribAdjustment","maghrib","ishaAdjustment","timeForPrayer","prayer","currentPrayer","nextPrayer","HighLatitudeRule","MiddleOfTheNight","SeventhOfTheNight","TwilightAngle","CalculationParameters","methodName","highLatitudeRule","CalculationMethod","MuslimWorldLeague","params","Egyptian","Karachi","UmmAlQura","Dubai","MoonsightingCommittee","NorthAmerica","Kuwait","Qatar","Singapore","Tehran","Turkey","Other","qibla","makkah","SunnahTimes","prayerTimes","nextDay","nextDayPrayerTimes","nightDuration","middleOfTheNight","lastThirdOfTheNight","adhan","Qibla"],"mappings":"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","file":"Adhan.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"adhan\"] = factory();\n\telse\n\t\troot[\"adhan\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default class Coordinates {\n constructor(latitude, longitude) {\n this.latitude = latitude;\n this.longitude = longitude;\n }\n}\n","export function degreesToRadians(degrees) {\n return (degrees * Math.PI) / 180.0;\n}\n\nexport function radiansToDegrees(radians) {\n return (radians * 180.0) / Math.PI;\n}\n\nexport function normalizeToScale(number, max) {\n return number - (max * (Math.floor(number / max)))\n}\n\nexport function unwindAngle(angle) {\n return normalizeToScale(angle, 360.0);\n}\n\nexport function quadrantShiftAngle(angle) {\n if (angle >= -180 && angle <= 180) {\n return angle;\n }\n\n return angle - (360 * Math.round(angle/360));\n}\n","import Astronomical from './Astronomical';\n\nexport function dateByAddingDays(date, days) {\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate() + days;\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n return new Date(year, month, day, hours, minutes, seconds);\n}\n\nexport function dateByAddingMinutes(date, minutes) {\n return dateByAddingSeconds(date, minutes * 60);\n}\n\nexport function dateByAddingSeconds(date, seconds) {\n return new Date(date.getTime() + (seconds * 1000));\n}\n\nexport function roundedMinute(date) {\n const seconds = date.getUTCSeconds();\n const offset = seconds >= 30 ? 60 - seconds : -1 * seconds;\n return dateByAddingSeconds(date, offset);\n}\n\nexport function dayOfYear(date) {\n let returnedDayOfYear = 0;\n const feb = Astronomical.isLeapYear(date.getFullYear()) ? 29 : 28;\n const months = [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n for (let i = 0; i < date.getMonth(); i++) {\n returnedDayOfYear += months[i];\n }\n\n returnedDayOfYear += date.getDate();\n\n return returnedDayOfYear;\n}\n\nexport function isValidDate(date) {\n return date instanceof Date && !isNaN(date.valueOf());\n}\n","import { degreesToRadians, radiansToDegrees, unwindAngle, normalizeToScale, quadrantShiftAngle } from './MathUtils';\nimport { dateByAddingSeconds } from './DateUtils';\n\nconst Astronomical = {\n\n /* The geometric mean longitude of the sun in degrees. */\n meanSolarLongitude: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 163 */\n const term1 = 280.4664567;\n const term2 = 36000.76983 * T;\n const term3 = 0.0003032 * Math.pow(T, 2);\n const L0 = term1 + term2 + term3;\n return unwindAngle(L0);\n },\n\n /* The geometric mean longitude of the moon in degrees. */\n meanLunarLongitude: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = 218.3165;\n const term2 = 481267.8813 * T;\n const Lp = term1 + term2;\n return unwindAngle(Lp);\n },\n\n ascendingLunarNodeLongitude: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = 125.04452;\n const term2 = 1934.136261 * T;\n const term3 = 0.0020708 * Math.pow(T, 2);\n const term4 = Math.pow(T, 3) / 450000;\n const Omega = term1 - term2 + term3 + term4;\n return unwindAngle(Omega);\n },\n\n /* The mean anomaly of the sun. */\n meanSolarAnomaly: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 163 */\n const term1 = 357.52911;\n const term2 = 35999.05029 * T;\n const term3 = 0.0001537 * Math.pow(T, 2);\n const M = term1 + term2 - term3;\n return unwindAngle(M);\n },\n\n /* The Sun's equation of the center in degrees. */\n solarEquationOfTheCenter: function(julianCentury, meanAnomaly) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 164 */\n const Mrad = degreesToRadians(meanAnomaly);\n const term1 = (1.914602 - (0.004817 * T) - (0.000014 * Math.pow(T, 2))) * Math.sin(Mrad);\n const term2 = (0.019993 - (0.000101 * T)) * Math.sin(2 * Mrad);\n const term3 = 0.000289 * Math.sin(3 * Mrad);\n return term1 + term2 + term3;\n },\n\n /* The apparent longitude of the Sun, referred to the\n true equinox of the date. */\n apparentSolarLongitude: function(julianCentury, meanLongitude) {\n const T = julianCentury;\n const L0 = meanLongitude;\n /* Equation from Astronomical Algorithms page 164 */\n const longitude = L0 + Astronomical.solarEquationOfTheCenter(T, Astronomical.meanSolarAnomaly(T));\n const Omega = 125.04 - (1934.136 * T);\n const Lambda = longitude - 0.00569 - (0.00478 * Math.sin(degreesToRadians(Omega)));\n return unwindAngle(Lambda);\n },\n\n /* The mean obliquity of the ecliptic, formula\n adopted by the International Astronomical Union.\n Represented in degrees. */\n meanObliquityOfTheEcliptic: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 147 */\n const term1 = 23.439291;\n const term2 = 0.013004167 * T;\n const term3 = 0.0000001639 * Math.pow(T, 2);\n const term4 = 0.0000005036 * Math.pow(T, 3);\n return term1 - term2 - term3 + term4;\n },\n\n /* The mean obliquity of the ecliptic, corrected for\n calculating the apparent position of the sun, in degrees. */\n apparentObliquityOfTheEcliptic: function(julianCentury, meanObliquityOfTheEcliptic) {\n const T = julianCentury;\n const Epsilon0 = meanObliquityOfTheEcliptic;\n /* Equation from Astronomical Algorithms page 165 */\n const O = 125.04 - (1934.136 * T);\n return Epsilon0 + (0.00256 * Math.cos(degreesToRadians(O)));\n },\n\n /* Mean sidereal time, the hour angle of the vernal equinox, in degrees. */\n meanSiderealTime: function(julianCentury) {\n const T = julianCentury;\n /* Equation from Astronomical Algorithms page 165 */\n const JD = (T * 36525) + 2451545.0;\n const term1 = 280.46061837;\n const term2 = 360.98564736629 * (JD - 2451545);\n const term3 = 0.000387933 * Math.pow(T, 2);\n const term4 = Math.pow(T, 3) / 38710000;\n const Theta = term1 + term2 + term3 - term4;\n return unwindAngle(Theta)\n },\n\n nutationInLongitude: function(julianCentury, solarLongitude, lunarLongitude, ascendingNode) {\n const L0 = solarLongitude;\n const Lp = lunarLongitude;\n const Omega = ascendingNode;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = (-17.2/3600) * Math.sin(degreesToRadians(Omega));\n const term2 = (1.32/3600) * Math.sin(2 * degreesToRadians(L0));\n const term3 = (0.23/3600) * Math.sin(2 * degreesToRadians(Lp));\n const term4 = (0.21/3600) * Math.sin(2 * degreesToRadians(Omega));\n return term1 - term2 - term3 + term4;\n },\n\n nutationInObliquity: function(julianCentury, solarLongitude, lunarLongitude, ascendingNode) {\n const L0 = solarLongitude;\n const Lp = lunarLongitude;\n const Omega = ascendingNode;\n /* Equation from Astronomical Algorithms page 144 */\n const term1 = (9.2/3600) * Math.cos(degreesToRadians(Omega));\n const term2 = (0.57/3600) * Math.cos(2 * degreesToRadians(L0));\n const term3 = (0.10/3600) * Math.cos(2 * degreesToRadians(Lp));\n const term4 = (0.09/3600) * Math.cos(2 * degreesToRadians(Omega));\n return term1 + term2 + term3 - term4;\n },\n\n altitudeOfCelestialBody: function(observerLatitude, declination, localHourAngle) {\n const Phi = observerLatitude;\n const delta = declination;\n const H = localHourAngle;\n /* Equation from Astronomical Algorithms page 93 */\n const term1 = Math.sin(degreesToRadians(Phi)) * Math.sin(degreesToRadians(delta));\n const term2 = Math.cos(degreesToRadians(Phi)) * Math.cos(degreesToRadians(delta)) * Math.cos(degreesToRadians(H));\n return radiansToDegrees(Math.asin(term1 + term2));\n },\n\n approximateTransit: function(longitude, siderealTime, rightAscension) {\n const L = longitude;\n const Theta0 = siderealTime;\n const a2 = rightAscension;\n /* Equation from page Astronomical Algorithms 102 */\n const Lw = L * -1;\n return normalizeToScale((a2 + Lw - Theta0) / 360, 1);\n },\n\n /* The time at which the sun is at its highest point in the sky (in universal time) */\n correctedTransit: function(approximateTransit, longitude, siderealTime, rightAscension, previousRightAscension, nextRightAscension) {\n const m0 = approximateTransit;\n const L = longitude;\n const Theta0 = siderealTime;\n const a2 = rightAscension;\n const a1 = previousRightAscension;\n const a3 = nextRightAscension;\n /* Equation from page Astronomical Algorithms 102 */\n const Lw = L * -1;\n const Theta = unwindAngle((Theta0 + (360.985647 * m0)));\n const a = unwindAngle(Astronomical.interpolateAngles(a2, a1, a3, m0));\n const H = quadrantShiftAngle(Theta - Lw - a);\n const dm = H / -360;\n return (m0 + dm) * 24;\n },\n\n correctedHourAngle: function(approximateTransit, angle, coordinates, afterTransit, siderealTime,\n rightAscension, previousRightAscension, nextRightAscension, declination, previousDeclination, nextDeclination) {\n const m0 = approximateTransit;\n const h0 = angle;\n const Theta0 = siderealTime;\n const a2 = rightAscension;\n const a1 = previousRightAscension;\n const a3 = nextRightAscension;\n const d2 = declination;\n const d1 = previousDeclination;\n const d3 = nextDeclination;\n\n /* Equation from page Astronomical Algorithms 102 */\n const Lw = coordinates.longitude * -1;\n const term1 = Math.sin(degreesToRadians(h0)) - (Math.sin(degreesToRadians(coordinates.latitude)) * Math.sin(degreesToRadians(d2)));\n const term2 = Math.cos(degreesToRadians(coordinates.latitude)) * Math.cos(degreesToRadians(d2));\n const H0 = radiansToDegrees(Math.acos(term1 / term2));\n const m = afterTransit ? m0 + (H0 / 360) : m0 - (H0 / 360);\n const Theta = unwindAngle((Theta0 + (360.985647 * m)));\n const a = unwindAngle(Astronomical.interpolateAngles(a2, a1, a3, m));\n const delta = Astronomical.interpolate(d2, d1, d3, m);\n const H = (Theta - Lw - a);\n const h = Astronomical.altitudeOfCelestialBody(coordinates.latitude, delta, H);\n const term3 = h - h0;\n const term4 = 360 * Math.cos(degreesToRadians(delta)) * Math.cos(degreesToRadians(coordinates.latitude)) * Math.sin(degreesToRadians(H));\n const dm = term3 / term4;\n return (m + dm) * 24;\n },\n\n /* Interpolation of a value given equidistant\n previous and next values and a factor\n equal to the fraction of the interpolated\n point's time over the time between values. */\n interpolate: function(y2, y1, y3, n) {\n /* Equation from Astronomical Algorithms page 24 */\n const a = y2 - y1;\n const b = y3 - y2;\n const c = b - a;\n return y2 + ((n/2) * (a + b + (n * c)));\n },\n\n /* Interpolation of three angles, accounting for\n angle unwinding. */\n interpolateAngles: function(y2, y1, y3, n) {\n /* Equation from Astronomical Algorithms page 24 */\n const a = unwindAngle(y2 - y1);\n const b = unwindAngle(y3 - y2);\n const c = b - a;\n return y2 + ((n/2) * (a + b + (n * c)));\n },\n\n /* The Julian Day for the given Gregorian date components. */\n julianDay: function(year, month, day, hours) {\n /* Equation from Astronomical Algorithms page 60 */\n if (typeof hours === 'undefined') {\n hours = 0;\n }\n\n const trunc = Math.trunc || function (x) { return x < 0 ? Math.ceil(x) : Math.floor(x); };\n\n const Y = trunc(month > 2 ? year : year - 1);\n const M = trunc(month > 2 ? month : month + 12);\n const D = day + (hours / 24);\n\n const A = trunc(Y/100);\n const B = trunc(2 - A + trunc(A/4));\n\n const i0 = trunc(365.25 * (Y + 4716));\n const i1 = trunc(30.6001 * (M + 1));\n\n return i0 + i1 + D + B - 1524.5;\n },\n\n /* Julian century from the epoch. */\n julianCentury: function(julianDay) {\n /* Equation from Astronomical Algorithms page 163 */\n return (julianDay - 2451545.0) / 36525;\n },\n\n /* Whether or not a year is a leap year (has 366 days). */\n isLeapYear: function(year) {\n if (year % 4 != 0) {\n return false;\n }\n\n if (year % 100 == 0 && year % 400 != 0) {\n return false;\n }\n\n return true;\n },\n\n seasonAdjustedMorningTwilight: function(latitude, dayOfYear, year, sunrise) {\n const a = 75 + ((28.65 / 55.0) * Math.abs(latitude));\n const b = 75 + ((19.44 / 55.0) * Math.abs(latitude));\n const c = 75 + ((32.74 / 55.0) * Math.abs(latitude));\n const d = 75 + ((48.10 / 55.0) * Math.abs(latitude));\n\n const adjustment = (function() {\n const dyy = Astronomical.daysSinceSolstice(dayOfYear, year, latitude);\n if ( dyy < 91) {\n return a + ( b - a ) / 91.0 * dyy;\n } else if ( dyy < 137) {\n return b + ( c - b ) / 46.0 * ( dyy - 91 );\n } else if ( dyy < 183 ) {\n return c + ( d - c ) / 46.0 * ( dyy - 137 );\n } else if ( dyy < 229 ) {\n return d + ( c - d ) / 46.0 * ( dyy - 183 );\n } else if ( dyy < 275 ) {\n return c + ( b - c ) / 46.0 * ( dyy - 229 );\n } else {\n return b + ( a - b ) / 91.0 * ( dyy - 275 );\n }\n })();\n\n return dateByAddingSeconds(sunrise, Math.round(adjustment * -60.0));\n },\n\n seasonAdjustedEveningTwilight: function(latitude, dayOfYear, year, sunset) {\n const a = 75 + ((25.60 / 55.0) * Math.abs(latitude));\n const b = 75 + ((2.050 / 55.0) * Math.abs(latitude));\n const c = 75 - ((9.210 / 55.0) * Math.abs(latitude));\n const d = 75 + ((6.140 / 55.0) * Math.abs(latitude));\n\n const adjustment = (function() {\n const dyy = Astronomical.daysSinceSolstice(dayOfYear, year, latitude);\n if ( dyy < 91) {\n return a + ( b - a ) / 91.0 * dyy;\n } else if ( dyy < 137) {\n return b + ( c - b ) / 46.0 * ( dyy - 91 );\n } else if ( dyy < 183 ) {\n return c + ( d - c ) / 46.0 * ( dyy - 137 );\n } else if ( dyy < 229 ) {\n return d + ( c - d ) / 46.0 * ( dyy - 183 );\n } else if ( dyy < 275 ) {\n return c + ( b - c ) / 46.0 * ( dyy - 229 );\n } else {\n return b + ( a - b ) / 91.0 * ( dyy - 275 );\n }\n })();\n\n return dateByAddingSeconds(sunset, Math.round(adjustment * 60.0));\n },\n\n daysSinceSolstice: function(dayOfYear, year, latitude) {\n let daysSinceSolstice = 0;\n const northernOffset = 10;\n const southernOffset = Astronomical.isLeapYear(year) ? 173 : 172;\n const daysInYear = Astronomical.isLeapYear(year) ? 366 : 365;\n\n if (latitude >= 0) {\n daysSinceSolstice = dayOfYear + northernOffset;\n if (daysSinceSolstice >= daysInYear) {\n daysSinceSolstice = daysSinceSolstice - daysInYear;\n }\n } else {\n daysSinceSolstice = dayOfYear - southernOffset;\n if (daysSinceSolstice < 0) {\n daysSinceSolstice = daysSinceSolstice + daysInYear;\n }\n }\n\n return daysSinceSolstice;\n }\n};\n\nexport default Astronomical;","import Astronomical from './Astronomical';\nimport { degreesToRadians, radiansToDegrees, unwindAngle } from './MathUtils';\n\nexport default class SolarCoordinates {\n constructor(julianDay) {\n const T = Astronomical.julianCentury(julianDay);\n const L0 = Astronomical.meanSolarLongitude(T);\n const Lp = Astronomical.meanLunarLongitude(T);\n const Omega = Astronomical.ascendingLunarNodeLongitude(T);\n const Lambda = degreesToRadians(Astronomical.apparentSolarLongitude(T, L0));\n const Theta0 = Astronomical.meanSiderealTime(T);\n const dPsi = Astronomical.nutationInLongitude(T, L0, Lp, Omega);\n const dEpsilon = Astronomical.nutationInObliquity(T, L0, Lp, Omega);\n const Epsilon0 = Astronomical.meanObliquityOfTheEcliptic(T);\n const EpsilonApparent = degreesToRadians(Astronomical.apparentObliquityOfTheEcliptic(T, Epsilon0));\n\n /* declination: The declination of the sun, the angle between\n the rays of the Sun and the plane of the Earth's\n equator, in degrees.\n Equation from Astronomical Algorithms page 165 */\n this.declination = radiansToDegrees(Math.asin(Math.sin(EpsilonApparent) * Math.sin(Lambda)));\n\n /* rightAscension: Right ascension of the Sun, the angular distance on the\n celestial equator from the vernal equinox to the hour circle,\n in degrees.\n Equation from Astronomical Algorithms page 165 */\n this.rightAscension = unwindAngle(radiansToDegrees(Math.atan2(Math.cos(EpsilonApparent) * Math.sin(Lambda), Math.cos(Lambda))));\n\n /* apparentSiderealTime: Apparent sidereal time, the hour angle of the vernal\n equinox, in degrees.\n Equation from Astronomical Algorithms page 88 */\n this.apparentSiderealTime = Theta0 + (((dPsi * 3600) * Math.cos(degreesToRadians(Epsilon0 + dEpsilon))) / 3600);\n }\n}\n\n","import Astronomical from './Astronomical';\nimport { degreesToRadians, radiansToDegrees } from './MathUtils'\nimport SolarCoordinates from './SolarCoordinates';\n\nexport default class SolarTime {\n constructor(date, coordinates) {\n const julianDay = Astronomical.julianDay(date.getFullYear(), date.getMonth() + 1, date.getDate(), 0);\n\n this.observer = coordinates;\n this.solar = new SolarCoordinates(julianDay);\n\n this.prevSolar = new SolarCoordinates(julianDay - 1);\n this.nextSolar = new SolarCoordinates(julianDay + 1);\n\n const m0 = Astronomical.approximateTransit(coordinates.longitude, this.solar.apparentSiderealTime, this.solar.rightAscension);\n const solarAltitude = -50.0 / 60.0;\n\n this.approxTransit = m0;\n\n this.transit = Astronomical.correctedTransit(m0, coordinates.longitude, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension);\n\n this.sunrise = Astronomical.correctedHourAngle(m0, solarAltitude, coordinates, false, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, \n this.solar.declination, this.prevSolar.declination, this.nextSolar.declination);\n\n this.sunset = Astronomical.correctedHourAngle(m0, solarAltitude, coordinates, true, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, \n this.solar.declination, this.prevSolar.declination, this.nextSolar.declination);\n }\n\n hourAngle(angle, afterTransit) {\n return Astronomical.correctedHourAngle(this.approxTransit, angle, this.observer, afterTransit, this.solar.apparentSiderealTime, \n this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, \n this.solar.declination, this.prevSolar.declination, this.nextSolar.declination);\n }\n\n afternoon(shadowLength) {\n // TODO source shadow angle calculation\n const tangent = Math.abs(this.observer.latitude - this.solar.declination);\n const inverse = shadowLength + Math.tan(degreesToRadians(tangent));\n const angle = radiansToDegrees(Math.atan(1.0 / inverse));\n return this.hourAngle(angle, true);\n }\n}\n\n\n","export default class TimeComponents {\n constructor(number) {\n this.hours = Math.floor(number);\n this.minutes = Math.floor((number - this.hours) * 60);\n this.seconds = Math.floor((number - (this.hours + this.minutes / 60)) * 60 * 60);\n return this;\n }\n \n utcDate(year, month, date) {\n return new Date(Date.UTC(year, month, date, this.hours, this.minutes, this.seconds));\n }\n}\n","const Prayer = {\n Fajr: 'fajr',\n Sunrise: 'sunrise',\n Dhuhr: 'dhuhr',\n Asr: 'asr',\n Maghrib: 'maghrib',\n Isha: 'isha',\n None: 'none'\n};\n\nexport default Prayer;","export const Madhab = {\n Shafi: 'shafi',\n Hanafi: 'hanafi'\n};\n\nexport function shadowLength(madhab) {\n switch (madhab) {\n case Madhab.Shafi:\n return 1;\n case Madhab.Hanafi:\n return 2\n default:\n throw \"Invalid Madhab\";\n }\n}\n","import SolarTime from './SolarTime';\nimport { dateByAddingDays } from './DateUtils';\n\nexport const PolarCircleResolution = {\n aqrabBalad: 'aqrab-balad',\n aqrabYaum: 'aqrab-yaum',\n unresolved: 'unresolved'\n};\n\nconst LATITUDE_VARIATION_STEP = 0.5; // Degrees to add/remove at each resolution step\nconst UNSAFE_LATITUDE = 65; // Based on https://en.wikipedia.org/wiki/Midnight_sun\n\nconst isValidSolarTime = (solarTime) => solarTime && !isNaN(solarTime.sunrise) && !isNaN(solarTime.sunset);\n\nconst aqrabYaumResolver = (coordinates, date, daysAdded = 1, direction = 1) => {\n if (daysAdded > Math.ceil(365 / 2)) {\n return null;\n }\n const testDate = new Date(date.getTime());\n testDate.setDate(testDate.getDate() + (direction * daysAdded));\n const tomorrow = dateByAddingDays(testDate, 1);\n const solarTime = new SolarTime(testDate, coordinates);\n const tomorrowSolarTime = new SolarTime(tomorrow, coordinates);\n\n if (!isValidSolarTime(solarTime) || !isValidSolarTime(tomorrowSolarTime)) {\n return aqrabYaumResolver(coordinates, date, daysAdded + (direction > 0 ? 0 : 1), -direction);\n }\n\n return {\n date,\n tomorrow,\n coordinates,\n solarTime,\n tomorrowSolarTime,\n };\n}\n\nconst aqrabBaladResolver = (coordinates, date, latitude) => {\n const solarTime = new SolarTime(date, { ...coordinates, latitude });\n const tomorrow = dateByAddingDays(date, 1);\n const tomorrowSolarTime = new SolarTime(tomorrow, { ...coordinates, latitude });\n if (!isValidSolarTime(solarTime) || !isValidSolarTime(tomorrowSolarTime)) {\n return (Math.abs(latitude) >= UNSAFE_LATITUDE) ?\n aqrabBaladResolver(coordinates, date, latitude - Math.sign(latitude) * LATITUDE_VARIATION_STEP)\n : null;\n }\n\n return {\n date,\n tomorrow,\n coordinates: { latitude, longitude: coordinates.longitude },\n solarTime,\n tomorrowSolarTime,\n };\n};\n\nexport const polarCircleResolvedValues = (resolver, date, coordinates) => {\n const defaultReturn = {\n date,\n tomorrow: dateByAddingDays(date, 1),\n coordinates,\n solarTime: new SolarTime(date, coordinates),\n tomorrowSolarTime: new SolarTime(dateByAddingDays(date, 1), coordinates),\n };\n\n switch (resolver) {\n case PolarCircleResolution.aqrabYaum: {\n return aqrabYaumResolver(coordinates, date) || defaultReturn;\n }\n case PolarCircleResolution.aqrabBalad: {\n const { latitude } = coordinates;\n return aqrabBaladResolver(coordinates, date, latitude - (Math.sign(latitude) * LATITUDE_VARIATION_STEP)) || defaultReturn;\n }\n default: {\n return defaultReturn;\n }\n }\n};\n","import SolarTime from './SolarTime';\nimport TimeComponents from './TimeComponents';\nimport Prayer from './Prayer';\nimport Astronomical from './Astronomical';\nimport {\n dateByAddingDays,\n dateByAddingMinutes,\n dateByAddingSeconds,\n roundedMinute,\n dayOfYear,\n isValidDate\n} from './DateUtils';\nimport { Madhab, shadowLength } from './Madhab';\nimport { PolarCircleResolution, polarCircleResolvedValues } from './PolarCircleResolution';\n\nexport default class PrayerTimes {\n constructor(coordinates, date, calculationParameters) {\n this.coordinates = coordinates;\n this.date = date;\n this.calculationParameters = calculationParameters;\n\n var solarTime = new SolarTime(date, coordinates);\n\n var fajrTime;\n var sunriseTime;\n var dhuhrTime;\n var asrTime;\n var maghribTime;\n var ishaTime;\n\n var nightFraction;\n\n dhuhrTime = new TimeComponents(solarTime.transit).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n sunriseTime = new TimeComponents(solarTime.sunrise).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n var sunsetTime = new TimeComponents(solarTime.sunset).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n var tomorrow = dateByAddingDays(date, 1);\n var tomorrowSolarTime = new SolarTime(tomorrow, coordinates);\n\n const polarCircleResolver = calculationParameters.polarCircleResolution;\n if (\n (!isValidDate(sunriseTime) || !isValidDate(sunsetTime) || isNaN(tomorrowSolarTime.sunrise))\n && polarCircleResolver !== PolarCircleResolution.unresolved\n ) {\n const resolved = polarCircleResolvedValues(polarCircleResolver, date, coordinates);\n this.coordinates = resolved.coordinates;\n this.date.setTime(resolved.date.getTime());\n solarTime = resolved.solarTime;\n tomorrow = resolved.tomorrow;\n tomorrowSolarTime = resolved.tomorrowSolarTime;\n const dateComponents = [date.getFullYear(), date.getMonth(), date.getDate()];\n\n dhuhrTime = new TimeComponents(solarTime.transit).utcDate(...dateComponents);\n sunriseTime = new TimeComponents(solarTime.sunrise).utcDate(...dateComponents);\n sunsetTime = new TimeComponents(solarTime.sunset).utcDate(...dateComponents);\n }\n\n asrTime = new TimeComponents(solarTime.afternoon(shadowLength(calculationParameters.madhab))).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n\n var tomorrowSunrise = new TimeComponents(tomorrowSolarTime.sunrise).utcDate(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate());\n var night = (tomorrowSunrise - sunsetTime) / 1000;\n\n fajrTime = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.fajrAngle, false)).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n\n // special case for moonsighting committee above latitude 55\n if (calculationParameters.method == \"MoonsightingCommittee\" && coordinates.latitude >= 55) {\n nightFraction = night / 7;\n fajrTime = dateByAddingSeconds(sunriseTime, -nightFraction);\n }\n\n var safeFajr = (function () {\n if (calculationParameters.method == \"MoonsightingCommittee\") {\n return Astronomical.seasonAdjustedMorningTwilight(coordinates.latitude, dayOfYear(date), date.getFullYear(), sunriseTime);\n }\n else {\n var portion = calculationParameters.nightPortions().fajr;\n nightFraction = portion * night;\n return dateByAddingSeconds(sunriseTime, -nightFraction);\n }\n })();\n\n if (fajrTime == null || isNaN(fajrTime.getTime()) || safeFajr > fajrTime) {\n fajrTime = safeFajr;\n }\n\n if (calculationParameters.ishaInterval > 0) {\n ishaTime = dateByAddingMinutes(sunsetTime, calculationParameters.ishaInterval);\n } else {\n ishaTime = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.ishaAngle, true)).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n\n // special case for moonsighting committee above latitude 55\n if (calculationParameters.method == \"MoonsightingCommittee\" && coordinates.latitude >= 55) {\n nightFraction = night / 7;\n ishaTime = dateByAddingSeconds(sunsetTime, nightFraction);\n }\n\n var safeIsha = (function () {\n if (calculationParameters.method == \"MoonsightingCommittee\") {\n return Astronomical.seasonAdjustedEveningTwilight(coordinates.latitude, dayOfYear(date), date.getFullYear(), sunsetTime);\n }\n else {\n var portion = calculationParameters.nightPortions().isha;\n nightFraction = portion * night;\n return dateByAddingSeconds(sunsetTime, nightFraction);\n }\n })();\n\n if (ishaTime == null || isNaN(ishaTime.getTime()) || safeIsha < ishaTime) {\n ishaTime = safeIsha;\n }\n }\n\n maghribTime = sunsetTime;\n if (calculationParameters.maghribAngle) {\n let angleBasedMaghrib = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.maghribAngle, true)).utcDate(date.getFullYear(), date.getMonth(), date.getDate());\n if (sunsetTime < angleBasedMaghrib && ishaTime > angleBasedMaghrib) {\n maghribTime = angleBasedMaghrib;\n }\n }\n\n var fajrAdjustment = (calculationParameters.adjustments.fajr || 0) + (calculationParameters.methodAdjustments.fajr || 0);\n var sunriseAdjustment = (calculationParameters.adjustments.sunrise || 0) + (calculationParameters.methodAdjustments.sunrise || 0);\n var dhuhrAdjustment = (calculationParameters.adjustments.dhuhr || 0) + (calculationParameters.methodAdjustments.dhuhr || 0);\n var asrAdjustment = (calculationParameters.adjustments.asr || 0) + (calculationParameters.methodAdjustments.asr || 0);\n var maghribAdjustment = (calculationParameters.adjustments.maghrib || 0) + (calculationParameters.methodAdjustments.maghrib || 0);\n var ishaAdjustment = (calculationParameters.adjustments.isha || 0) + (calculationParameters.methodAdjustments.isha || 0);\n\n this.fajr = roundedMinute(dateByAddingMinutes(fajrTime, fajrAdjustment));\n this.sunrise = roundedMinute(dateByAddingMinutes(sunriseTime, sunriseAdjustment));\n this.dhuhr = roundedMinute(dateByAddingMinutes(dhuhrTime, dhuhrAdjustment));\n this.asr = roundedMinute(dateByAddingMinutes(asrTime, asrAdjustment));\n this.maghrib = roundedMinute(dateByAddingMinutes(maghribTime, maghribAdjustment));\n this.isha = roundedMinute(dateByAddingMinutes(ishaTime, ishaAdjustment));\n }\n\n timeForPrayer(prayer) {\n if (prayer == Prayer.Fajr) {\n return this.fajr;\n }\n else if (prayer == Prayer.Sunrise) {\n return this.sunrise;\n }\n else if (prayer == Prayer.Dhuhr) {\n return this.dhuhr;\n }\n else if (prayer == Prayer.Asr) {\n return this.asr;\n }\n else if (prayer == Prayer.Maghrib) {\n return this.maghrib;\n }\n else if (prayer == Prayer.Isha) {\n return this.isha;\n }\n else {\n return null;\n }\n }\n\n currentPrayer(date) {\n if (typeof date === 'undefined') {\n date = new Date();\n }\n if (date >= this.isha) {\n return Prayer.Isha;\n }\n else if (date >= this.maghrib) {\n return Prayer.Maghrib;\n }\n else if (date >= this.asr) {\n return Prayer.Asr;\n }\n else if (date >= this.dhuhr) {\n return Prayer.Dhuhr;\n }\n else if (date >= this.sunrise) {\n return Prayer.Sunrise;\n }\n else if (date >= this.fajr) {\n return Prayer.Fajr;\n }\n else {\n return Prayer.None;\n }\n }\n\n nextPrayer(date) {\n if (typeof date === 'undefined') {\n date = new Date();\n }\n if (date >= this.isha) {\n return Prayer.None;\n }\n else if (date >= this.maghrib) {\n return Prayer.Isha;\n }\n else if (date >= this.asr) {\n return Prayer.Maghrib;\n }\n else if (date >= this.dhuhr) {\n return Prayer.Asr;\n }\n else if (date >= this.sunrise) {\n return Prayer.Dhuhr;\n }\n else if (date >= this.fajr) {\n return Prayer.Sunrise;\n }\n else {\n return Prayer.Fajr;\n }\n }\n}\n\n","const HighLatitudeRule = {\n MiddleOfTheNight: 'middleofthenight',\n SeventhOfTheNight: 'seventhofthenight',\n TwilightAngle: 'twilightangle'\n};\n\nexport default HighLatitudeRule;","import { Madhab } from './Madhab';\nimport HighLatitudeRule from './HighLatitudeRule';\nimport { PolarCircleResolution } from './PolarCircleResolution';\n\nexport default class CalculationParameters {\n constructor(methodName, fajrAngle, ishaAngle, ishaInterval, maghribAngle) {\n this.method = methodName || \"Other\";\n this.fajrAngle = fajrAngle || 0;\n this.ishaAngle = ishaAngle || 0;\n this.ishaInterval = ishaInterval || 0;\n this.maghribAngle = maghribAngle;\n this.madhab = Madhab.Shafi;\n this.highLatitudeRule = HighLatitudeRule.MiddleOfTheNight;\n this.adjustments = { fajr: 0, sunrise: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0 };\n this.methodAdjustments = { fajr: 0, sunrise: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0 };\n this.polarCircleResolution = PolarCircleResolution.unresolved;\n }\n\n nightPortions() {\n switch (this.highLatitudeRule) {\n case HighLatitudeRule.MiddleOfTheNight:\n return { fajr: 1 / 2, isha: 1 / 2 };\n case HighLatitudeRule.SeventhOfTheNight:\n return { fajr: 1 / 7, isha: 1 / 7 };\n case HighLatitudeRule.TwilightAngle:\n return { fajr: this.fajrAngle / 60, isha: this.ishaAngle / 60 };\n default:\n throw(`Invalid high latitude rule found when attempting to compute night portions: ${this.highLatitudeRule}`);\n }\n }\n}\n","import CalculationParameters from './CalculationParameters';\n\nconst CalculationMethod = {\n // Muslim World League\n MuslimWorldLeague: function() {\n let params = new CalculationParameters(\"MuslimWorldLeague\", 18, 17);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Egyptian General Authority of Survey\n Egyptian: function() {\n let params = new CalculationParameters(\"Egyptian\", 19.5, 17.5);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // University of Islamic Sciences, Karachi\n Karachi: function() {\n let params = new CalculationParameters(\"Karachi\", 18, 18);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Umm al-Qura University, Makkah\n UmmAlQura: function() {\n return new CalculationParameters(\"UmmAlQura\", 18.5, 0, 90);\n },\n\n // Dubai\n Dubai: function() {\n let params = new CalculationParameters(\"Dubai\", 18.2, 18.2);\n params.methodAdjustments = { sunrise: -3, dhuhr: 3, asr: 3, maghrib: 3 };\n return params;\n },\n\n // Moonsighting Committee\n MoonsightingCommittee: function() {\n let params = new CalculationParameters(\"MoonsightingCommittee\", 18, 18);\n params.methodAdjustments = { dhuhr: 5, maghrib: 3 };\n return params;\n },\n\n // ISNA\n NorthAmerica: function() {\n let params = new CalculationParameters(\"NorthAmerica\", 15, 15);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Kuwait\n Kuwait: function() {\n return new CalculationParameters(\"Kuwait\", 18, 17.5);\n },\n\n // Qatar\n Qatar: function() {\n return new CalculationParameters(\"Qatar\", 18, 0, 90);\n },\n\n // Singapore\n Singapore: function() {\n let params = new CalculationParameters(\"Singapore\", 20, 18);\n params.methodAdjustments = { dhuhr: 1 };\n return params;\n },\n\n // Institute of Geophysics, University of Tehran\n Tehran: function() {\n let params = new CalculationParameters(\"Tehran\", 17.7, 14, 0, 4.5);\n return params;\n },\n\n // Dianet\n Turkey: function() {\n let params = new CalculationParameters(\"Turkey\", 18, 17);\n params.methodAdjustments = { sunrise: -7, dhuhr: 5, asr: 4, maghrib: 7 };\n return params;\n },\n\n // Other\n Other: function() {\n return new CalculationParameters(\"Other\", 0, 0);\n }\n};\n\nexport default CalculationMethod;","import Coordinates from './Coordinates'\nimport { degreesToRadians, radiansToDegrees, unwindAngle } from './MathUtils'\n\nexport default function qibla(coordinates) {\n const makkah = new Coordinates(21.4225241, 39.8261818);\n\n // Equation from \"Spherical Trigonometry For the use of colleges and schools\" page 50\n const term1 = (\n Math.sin(degreesToRadians(makkah.longitude) -\n degreesToRadians(coordinates.longitude))\n );\n const term2 = (\n Math.cos(degreesToRadians(coordinates.latitude)) *\n Math.tan(degreesToRadians(makkah.latitude))\n );\n const term3 = (\n Math.sin(degreesToRadians(coordinates.latitude)) *\n Math.cos(degreesToRadians(makkah.longitude) -\n degreesToRadians(coordinates.longitude))\n );\n const angle = Math.atan2(term1, term2 - term3);\n\n return unwindAngle(radiansToDegrees(angle));\n}\n","import { dateByAddingDays, dateByAddingSeconds, roundedMinute } from './DateUtils';\nimport PrayerTimes from './PrayerTimes';\n\nexport default class SunnahTimes {\n constructor(prayerTimes) {\n const date = prayerTimes.date;\n const nextDay = dateByAddingDays(date, 1);\n const nextDayPrayerTimes = new PrayerTimes(prayerTimes.coordinates, nextDay, prayerTimes.calculationParameters);\n\n const nightDuration = (nextDayPrayerTimes.fajr.getTime() - prayerTimes.maghrib.getTime()) / 1000.0;\n\n this.middleOfTheNight = roundedMinute(dateByAddingSeconds(prayerTimes.maghrib, nightDuration / 2));\n this.lastThirdOfTheNight = roundedMinute(dateByAddingSeconds(prayerTimes.maghrib, nightDuration * (2 / 3)));\n }\n}\n\n","import Coordinates from './Coordinates';\nimport PrayerTimes from './PrayerTimes';\nimport Prayer from './Prayer';\nimport { Madhab } from './Madhab';\nimport HighLatitudeRule from './HighLatitudeRule';\nimport CalculationMethod from './CalculationMethod';\nimport CalculationParameters from './CalculationParameters';\nimport Qibla from './Qibla';\nimport SunnahTimes from './SunnahTimes';\nimport { PolarCircleResolution } from './PolarCircleResolution';\n\nconst adhan = {\n Prayer,\n Madhab,\n HighLatitudeRule,\n Coordinates,\n CalculationParameters,\n CalculationMethod,\n PrayerTimes,\n SunnahTimes,\n Qibla,\n PolarCircleResolution,\n};\n\nexport default adhan;"],"sourceRoot":""} \ No newline at end of file diff --git a/src/Adhan.js b/src/Adhan.js index 29523e4..e2ddbcd 100644 --- a/src/Adhan.js +++ b/src/Adhan.js @@ -5,19 +5,21 @@ import { Madhab } from './Madhab'; import HighLatitudeRule from './HighLatitudeRule'; import CalculationMethod from './CalculationMethod'; import CalculationParameters from './CalculationParameters'; -import qibla from './Qibla'; +import Qibla from './Qibla'; import SunnahTimes from './SunnahTimes'; +import { PolarCircleResolution } from './PolarCircleResolution'; const adhan = { - Prayer: Prayer, - Madhab: Madhab, - HighLatitudeRule: HighLatitudeRule, - Coordinates: Coordinates, - CalculationParameters: CalculationParameters, - CalculationMethod: CalculationMethod, - PrayerTimes: PrayerTimes, - SunnahTimes: SunnahTimes, - Qibla: qibla + Prayer, + Madhab, + HighLatitudeRule, + Coordinates, + CalculationParameters, + CalculationMethod, + PrayerTimes, + SunnahTimes, + Qibla, + PolarCircleResolution, }; export default adhan; \ No newline at end of file diff --git a/src/CalculationParameters.js b/src/CalculationParameters.js index 7e6da30..827823b 100644 --- a/src/CalculationParameters.js +++ b/src/CalculationParameters.js @@ -1,5 +1,6 @@ import { Madhab } from './Madhab'; import HighLatitudeRule from './HighLatitudeRule'; +import { PolarCircleResolution } from './PolarCircleResolution'; export default class CalculationParameters { constructor(methodName, fajrAngle, ishaAngle, ishaInterval, maghribAngle) { @@ -12,6 +13,7 @@ export default class CalculationParameters { this.highLatitudeRule = HighLatitudeRule.MiddleOfTheNight; this.adjustments = { fajr: 0, sunrise: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0 }; this.methodAdjustments = { fajr: 0, sunrise: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0 }; + this.polarCircleResolution = PolarCircleResolution.unresolved; } nightPortions() { diff --git a/src/DateUtils.js b/src/DateUtils.js index bd1afcb..60c6492 100644 --- a/src/DateUtils.js +++ b/src/DateUtils.js @@ -36,3 +36,7 @@ export function dayOfYear(date) { return returnedDayOfYear; } + +export function isValidDate(date) { + return date instanceof Date && !isNaN(date.valueOf()); +} diff --git a/src/PolarCircleResolution.js b/src/PolarCircleResolution.js new file mode 100644 index 0000000..72abb77 --- /dev/null +++ b/src/PolarCircleResolution.js @@ -0,0 +1,78 @@ +import SolarTime from './SolarTime'; +import { dateByAddingDays } from './DateUtils'; + +export const PolarCircleResolution = { + aqrabBalad: 'aqrab-balad', + aqrabYaum: 'aqrab-yaum', + unresolved: 'unresolved' +}; + +const LATITUDE_VARIATION_STEP = 0.5; // Degrees to add/remove at each resolution step +const UNSAFE_LATITUDE = 65; // Based on https://en.wikipedia.org/wiki/Midnight_sun + +const isValidSolarTime = (solarTime) => solarTime && !isNaN(solarTime.sunrise) && !isNaN(solarTime.sunset); + +const aqrabYaumResolver = (coordinates, date, daysAdded = 1, direction = 1) => { + if (daysAdded > Math.ceil(365 / 2)) { + return null; + } + const testDate = new Date(date.getTime()); + testDate.setDate(testDate.getDate() + (direction * daysAdded)); + const tomorrow = dateByAddingDays(testDate, 1); + const solarTime = new SolarTime(testDate, coordinates); + const tomorrowSolarTime = new SolarTime(tomorrow, coordinates); + + if (!isValidSolarTime(solarTime) || !isValidSolarTime(tomorrowSolarTime)) { + return aqrabYaumResolver(coordinates, date, daysAdded + (direction > 0 ? 0 : 1), -direction); + } + + return { + date, + tomorrow, + coordinates, + solarTime, + tomorrowSolarTime, + }; +} + +const aqrabBaladResolver = (coordinates, date, latitude) => { + const solarTime = new SolarTime(date, { ...coordinates, latitude }); + const tomorrow = dateByAddingDays(date, 1); + const tomorrowSolarTime = new SolarTime(tomorrow, { ...coordinates, latitude }); + if (!isValidSolarTime(solarTime) || !isValidSolarTime(tomorrowSolarTime)) { + return (Math.abs(latitude) >= UNSAFE_LATITUDE) ? + aqrabBaladResolver(coordinates, date, latitude - Math.sign(latitude) * LATITUDE_VARIATION_STEP) + : null; + } + + return { + date, + tomorrow, + coordinates: { latitude, longitude: coordinates.longitude }, + solarTime, + tomorrowSolarTime, + }; +}; + +export const polarCircleResolvedValues = (resolver, date, coordinates) => { + const defaultReturn = { + date, + tomorrow: dateByAddingDays(date, 1), + coordinates, + solarTime: new SolarTime(date, coordinates), + tomorrowSolarTime: new SolarTime(dateByAddingDays(date, 1), coordinates), + }; + + switch (resolver) { + case PolarCircleResolution.aqrabYaum: { + return aqrabYaumResolver(coordinates, date) || defaultReturn; + } + case PolarCircleResolution.aqrabBalad: { + const { latitude } = coordinates; + return aqrabBaladResolver(coordinates, date, latitude - (Math.sign(latitude) * LATITUDE_VARIATION_STEP)) || defaultReturn; + } + default: { + return defaultReturn; + } + } +}; diff --git a/src/PrayerTimes.js b/src/PrayerTimes.js index d718a98..f2cf324 100644 --- a/src/PrayerTimes.js +++ b/src/PrayerTimes.js @@ -2,8 +2,16 @@ import SolarTime from './SolarTime'; import TimeComponents from './TimeComponents'; import Prayer from './Prayer'; import Astronomical from './Astronomical'; -import { dateByAddingDays, dateByAddingMinutes, dateByAddingSeconds, roundedMinute, dayOfYear } from './DateUtils'; +import { + dateByAddingDays, + dateByAddingMinutes, + dateByAddingSeconds, + roundedMinute, + dayOfYear, + isValidDate +} from './DateUtils'; import { Madhab, shadowLength } from './Madhab'; +import { PolarCircleResolution, polarCircleResolvedValues } from './PolarCircleResolution'; export default class PrayerTimes { constructor(coordinates, date, calculationParameters) { @@ -25,11 +33,29 @@ export default class PrayerTimes { dhuhrTime = new TimeComponents(solarTime.transit).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); sunriseTime = new TimeComponents(solarTime.sunrise).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); var sunsetTime = new TimeComponents(solarTime.sunset).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); + var tomorrow = dateByAddingDays(date, 1); + var tomorrowSolarTime = new SolarTime(tomorrow, coordinates); + + const polarCircleResolver = calculationParameters.polarCircleResolution; + if ( + (!isValidDate(sunriseTime) || !isValidDate(sunsetTime) || isNaN(tomorrowSolarTime.sunrise)) + && polarCircleResolver !== PolarCircleResolution.unresolved + ) { + const resolved = polarCircleResolvedValues(polarCircleResolver, date, coordinates); + this.coordinates = resolved.coordinates; + this.date.setTime(resolved.date.getTime()); + solarTime = resolved.solarTime; + tomorrow = resolved.tomorrow; + tomorrowSolarTime = resolved.tomorrowSolarTime; + const dateComponents = [date.getFullYear(), date.getMonth(), date.getDate()]; + + dhuhrTime = new TimeComponents(solarTime.transit).utcDate(...dateComponents); + sunriseTime = new TimeComponents(solarTime.sunrise).utcDate(...dateComponents); + sunsetTime = new TimeComponents(solarTime.sunset).utcDate(...dateComponents); + } asrTime = new TimeComponents(solarTime.afternoon(shadowLength(calculationParameters.madhab))).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); - var tomorrow = dateByAddingDays(date, 1); - var tomorrowSolarTime = new SolarTime(tomorrow, coordinates); var tomorrowSunrise = new TimeComponents(tomorrowSolarTime.sunrise).utcDate(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate()); var night = (tomorrowSunrise - sunsetTime) / 1000; @@ -60,7 +86,7 @@ export default class PrayerTimes { ishaTime = dateByAddingMinutes(sunsetTime, calculationParameters.ishaInterval); } else { ishaTime = new TimeComponents(solarTime.hourAngle(-1 * calculationParameters.ishaAngle, true)).utcDate(date.getFullYear(), date.getMonth(), date.getDate()); - + // special case for moonsighting committee above latitude 55 if (calculationParameters.method == "MoonsightingCommittee" && coordinates.latitude >= 55) { nightFraction = night / 7; diff --git a/test/adhan.test.js b/test/adhan.test.js index e8cd1ea..854353f 100644 --- a/test/adhan.test.js +++ b/test/adhan.test.js @@ -1,7 +1,8 @@ import adhan from '../src/Adhan'; import moment from 'moment-timezone'; -import { dateByAddingSeconds } from '../src/DateUtils'; +import { dateByAddingSeconds, isValidDate } from '../src/DateUtils'; import { shadowLength } from '../src/Madhab'; +import * as polarCircleResolver from '../src/PolarCircleResolution'; test("Verifying the night portion defined by the high latitude rule", () => { let p1 = new adhan.CalculationParameters("Other", 18, 18); @@ -307,4 +308,145 @@ test("adjusting prayer time with high latitude rule", () => { expect(moment(p3.asr).tz(tzid).format("h:mm A")).toBe("5:46 PM"); expect(moment(p3.maghrib).tz(tzid).format("h:mm A")).toBe("10:01 PM"); expect(moment(p3.isha).tz(tzid).format("h:mm A")).toBe("11:50 PM"); +}); + +describe('Polar circle resolution cases', () => { + const prayersToCheck = ['fajr', 'sunrise', 'maghrib', 'isha']; + const regularDate = new Date(2020, 4, 15, 20, 0, 0, 0); + const dateAffectedByPolarNight = new Date(2020, 11, 21, 20, 0, 0, 0); + const dateAffectedByMidnightSun = new Date(2020, 5, 21, 20, 0, 0, 0); + const regularCoordinates = new adhan.Coordinates(31.947351, 35.227163); + const ArjeplogSweden = new adhan.Coordinates(66.7222444, 17.7189); + const AmundsenScottAntarctic = new adhan.Coordinates(-84.996, 0.01013); + const unresolvedParams = adhan.CalculationMethod.MuslimWorldLeague(); + let aqrabBaladParams = adhan.CalculationMethod.MuslimWorldLeague(); + aqrabBaladParams.polarCircleResolution = adhan.PolarCircleResolution.aqrabBalad; + let aqrabYaumParams = adhan.CalculationMethod.MuslimWorldLeague(); + aqrabYaumParams.polarCircleResolution = adhan.PolarCircleResolution.aqrabYaum; + + describe('Regular computation', () => { + it ('should not attempt to do any resolution if the resolver is set to unresolved', () => { + const spy = jest.spyOn(polarCircleResolver, 'polarCircleResolvedValues'); + const prayersTimes1 = new adhan.PrayerTimes( + ArjeplogSweden, + dateAffectedByMidnightSun, + unresolvedParams, + ); + const prayersTimes2 = new adhan.PrayerTimes( + ArjeplogSweden, + dateAffectedByMidnightSun, + unresolvedParams, + ); + + expect(spy).not.toHaveBeenCalled(); + }); + + it ('should not attempt to do any resolution if the date is affected neither by the polar night nor by the midnight sun', () => { + const spy = jest.spyOn(polarCircleResolver, 'polarCircleResolvedValues'); + const prayersTimes1 = new adhan.PrayerTimes( + ArjeplogSweden, + regularDate, + aqrabBaladParams, + ); + const prayersTimes2 = new adhan.PrayerTimes( + ArjeplogSweden, + regularDate, + aqrabYaumParams, + ); + + expect(spy).not.toHaveBeenCalled(); + }); + + it ('should not make any search if the location is outside the polar circles', () => { + const spy = jest.spyOn(polarCircleResolver, 'polarCircleResolvedValues'); + const prayersTimes1 = new adhan.PrayerTimes( + regularCoordinates, + dateAffectedByPolarNight, + aqrabBaladParams, + ); + const prayersTimes2 = new adhan.PrayerTimes( + regularCoordinates, + dateAffectedByPolarNight, + aqrabYaumParams, + ); + + expect(spy).not.toHaveBeenCalled(); + }); + }); + + describe('Midnight Sun case', () => { + it ('should fail to compute targeted prayer times with the "unresolved" resolver', () => { + const prayersTimes = new adhan.PrayerTimes( + ArjeplogSweden, + dateAffectedByMidnightSun, + unresolvedParams, + ); + + prayersToCheck.forEach((prayerName) => { + expect(isValidDate(prayersTimes[prayerName])).toEqual(false); + }); + }); + + it ('should succeed in computing all prayers times with the "aqrabBalad" resolver', () => { + const prayersTimes = new adhan.PrayerTimes( + ArjeplogSweden, + dateAffectedByMidnightSun, + aqrabBaladParams, + ); + + prayersToCheck.forEach((prayerName) => { + expect(isValidDate(prayersTimes[prayerName])).toEqual(true); + }); + }); + + it ('should succeed in computing all prayers times with the "aqrabYaum" resolver', () => { + const prayersTimes = new adhan.PrayerTimes( + ArjeplogSweden, + dateAffectedByMidnightSun, + aqrabYaumParams, + ); + + prayersToCheck.forEach((prayerName) => { + expect(isValidDate(prayersTimes[prayerName])).toEqual(true); + }); + }); + }); + + describe('Polar Night case', () => { + it ('should fail to compute targeted prayer times with the "unresolved" resolver ', () => { + const prayersTimes = new adhan.PrayerTimes( + AmundsenScottAntarctic, + dateAffectedByPolarNight, + unresolvedParams, + ); + + prayersToCheck.forEach((prayerName) => { + expect(isValidDate(prayersTimes[prayerName])).toEqual(false); + }); + }); + + it ('should succeed in computing all prayers times with the "aqrabBalad" resolver', () => { + const prayersTimes = new adhan.PrayerTimes( + AmundsenScottAntarctic, + dateAffectedByPolarNight, + aqrabBaladParams, + ); + + prayersToCheck.forEach((prayerName) => { + expect(isValidDate(prayersTimes[prayerName])).toEqual(true); + }); + }); + + it ('should succeed in computing all prayers times with the "aqrabYaum" resolver', () => { + const prayersTimes = new adhan.PrayerTimes( + AmundsenScottAntarctic, + dateAffectedByPolarNight, + aqrabYaumParams, + ); + + prayersToCheck.forEach((prayerName) => { + expect(isValidDate(prayersTimes[prayerName])).toEqual(true); + }); + }); + }); }); \ No newline at end of file