Home

Awesome

adhango

adhango is a Go library for calculating Islamic prayer times.

All astronomical calculations are high precision equations directly from the book “Astronomical Algorithms” by Jean Meeus. This book is recommended by the Astronomical Applications Department of the U.S. Naval Observatory and the Earth System Research Laboratory of the National Oceanic and Atmospheric Administration.

Implementations of Adhan in other languages can be found in the parent repo Adhan.

Usage

Importing

To use this module, import it by running go get github.com/mnadev/adhango. View it at pkg.go.dev.

Examples

See example/example.go to see complete examples of usage.

Initialization parameters

Date

The date parameter passed in should correspond DateComponents interface. The year, month, and day values need to be populated. The year, month and day values should be for the local date that you want prayer times for. These date values are expected to be for the Gregorian calendar. The NewDateComponents function takes a time.Time object and return a DateComponents object.

date := data.NewDateComponents(time.Date(2015, time.Month(7), 12, 0, 0, 0, 0, time.UTC))

Coordinates

Create a Coordinates object with the latitude and longitude for the location you want prayer times for.

coords, err := util.NewCoordinates(35.7750, -78.6336) // New York
if err != nil {
    fmt.Printf("got error %+v", err)
    return
}

Calculation parameters

The rest of the needed information is contained within the CalculationParameters interface.

The recommended way to initialize a CalculationParameters object is by using the GetMethodParameters function and passing in the desired CalculationMethod. You can then further customize the calculation parameters if needed.

params := calc.GetMethodParameters(calc.NORTH_AMERICA)
params.Madhab = calc.HANAFI

Alternatively, if you want you could use the CalculationParametersBuilder to build a CalculationParameters object.

params := calc.NewCalculationParametersBuilder().
    SetMadhab(calc.HANAFI).
    SetMethod(calc.NORTH_AMERICA).
    SetFajrAngle(15.0).
    SetIshaAngle(15.0).
    SetMethodAdjustments(calc.PrayerAdjustments{
        DhuhrAdj: 1,
    }).
    Build()
List of parameters
ParameterDescription
MethodCalculationMethod name
FajrAngleAngle of the sun used to calculate Fajr
IshaAngleAngle of the sun used to calculate Isha
IshaIntervalMinutes after Maghrib (if set, the time for Isha will be Maghrib plus ishaInterval)
MadhabValue from the Madhab enum, used to calculate Asr
HighLatitudeRuleValue from the HighLatitudeRule enum, used to set a minimum time for Fajr and a max time for Isha
AdjustmentsStruct with custom prayer time adjustments in minutes for each prayer time
MethodAdjustmentsStruct with custom prayer time adjustments in minutes for each prayer time

CalculationMethod

ValueDescription
MUSLIM_WORLD_LEAGUEMuslim World League. Fajr angle: 18, Isha angle: 17
EGYPTIANEgyptian General Authority of Survey. Fajr angle: 19.5, Isha angle: 17.5
KARACHIUniversity of Islamic Sciences, Karachi. Fajr angle: 18, Isha angle: 18
UMM_AL_QURAUmm al-Qura University, Makkah. Fajr angle: 18.5, Isha interval: 90. Note: you should add a +30 minute custom adjustment for Isha during Ramadan.
DUBAIMethod used in UAE. Fajr and Isha angles of 18.2 degrees.
MOONSIGHTING_COMMITTEEMoonsighting Committee. Fajr angle: 18, Isha angle: 18. Also uses seasonal adjustment values.
NORTH_AMERICAReferred to as the ISNA method. This method is included for completeness but is not recommended. Fajr angle: 15, Isha angle: 15
KUWAITKuwait. Fajr angle: 18, Isha angle: 17.5
QATARModified version of Umm al-Qura used in Qatar. Fajr angle: 18, Isha interval: 90.
SINGAPOREMethod used by Singapore. Fajr angle: 20, Isha angle: 18.
OTHERFajr angle: 0, Isha angle: 0. This is the default value for Method when initializing a CalculationParameters object.

Madhab

ValueDescription
SHAFIEarlier Asr time
HANAFILater Asr time

HighLatitudeRule

ValueDescription
MIDDLE_OF_THE_NIGHTFajr will never be earlier than the middle of the night and Isha will never be later than the middle of the night
SEVENTH_OF_THE_NIGHTFajr will never be earlier than the beginning of the last seventh of the night and Isha will never be later than the end of the first seventh of the night
TWILIGHT_ANGLESimilar to SEVENTH_OF_THE_NIGHT, but instead of 1/7, the fraction of the night used is fajrAngle/60 and ishaAngle/60

Prayer Times

After that, you can initialize the PrayerTimes struct by calling the NewPrayerTimes function. The PrayerTimes struct will hold timings for Fajr, Sunrise, Dhuhr, Asr, Maghrib and Isha as time.Time objects.

By default, the timings are in UTC. In order to specify a specific time zone, call the SetTimeZone function on the created PrayerTimes struct with the tz database time zone.

prayerTimes, err := calc.NewPrayerTimes(coords, date, params)
if err != nil {
    fmt.Printf("got error %+v", err)
    return
}

err = prayerTimes.SetTimeZone("America/New_York")
if err != nil {
    fmt.Printf("got error %+v", err)
    return
}

fmt.Printf("Fajr: %+v\n", prayerTimes.Fajr)       // Fajr: 2015-07-12 04:42:00 -0400 EDT
fmt.Printf("Sunrise: %+v\n", prayerTimes.Sunrise) // Sunrise: 2015-07-12 06:08:00 -0400 EDT
fmt.Printf("Dhuhr: %+v\n", prayerTimes.Dhuhr)     // Dhuhr: 2015-07-12 13:21:00 -0400 EDT
fmt.Printf("Asr: %+v\n", prayerTimes.Asr)         // Asr: 2015-07-12 18:22:00 -0400 EDT
fmt.Printf("Maghrib: %+v\n", prayerTimes.Maghrib) // Maghrib: 2015-07-12 20:32:00 -0400 EDT
fmt.Printf("Isha: %+v\n", prayerTimes.Isha)       // Isha: 2015-07-12 21:57:00 -0400 EDT