Coder Social home page Coder Social logo

prayertimes-swift's Introduction

PrayerTime-Swift

Islamic Prayer (salah) Time calculation written in swift. This prayer time calculation code is mostly converted from Objective C version of similar class from praytimes.org.

What it Does

It calculates prayer times for any date(s) based on:

  • Latitude/Longitude
  • Calculation Method
  • Asr Method (Shafi'i/Hanafi)
  • ... and optional higher latitude adjustment

For more information about these calculation methods and how it is obtained, check out fine document at prayertimes.org's wiki page

How to Use

Just import AKPrayerTime.swift in your project, and:

// Create PrayerKit instance with your latitude/longitude
var prayerKit:AKPrayerTime = AKPrayerTime(lat: 23.810332, lng: 90.4125181)
// Optionally, set your preferred calculation method.
// Default is Muslim World Legue (MWL) method
prayerKit.calculationMethod = .Karachi
// Optionally, set your preferred Asr method.
// Default is Safi'i
prayerKit.asrJuristic = .Hanafi
// Optionally, set your output format.
// You can obviously format it later also
prayerKit.outputFormat = .Time12
// ... and finally, get your times
var times = prayerKit.getPrayerTimes()

// Then, you can use it as
times[.Fajr]    // 04:07 am
times[.Sunrise] // 05:27 am
// ...and follow included example and public methods in source for more possibilities!

Basic configurations

Property Options
calculationMethod .MWL ➠ Muslim World League
.ISNA ➠ Islamic Society of North America
.Egypt ➠ Egyptian General Authority of Survey
.Makkah ➠ Umm al-Qura University, Makkah
.Karachi ➠ University of Islamic Science, Karachi
.Tehran ➠ Institute of Geophysics, University of Tehran
.Jafari ➠ Shia Ithna Ashari, Leva Research Institute, Qum
.Custom ➠ Autometically set when parameters are changed manually
asrJuristic .Shafii ➠ As followed by Shafi'i, Maliki, Ja'fari, and Hanbali school
.Hanafi ➠ As followed by Hanafi school

More details will be added soon. Contribution in both source and documentation is most welcome!

prayertimes-swift's People

Contributors

ashikahmad avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

prayertimes-swift's Issues

Outdated version of swift

The repo is using outdated version of swift and new xcode version doesn't run it, can you please update it.

Add 20 prayer times calculations methods

Here is info for 20 ready calculations methods if you add them it would be much better.
These info can be tested and verified from this website:

https://www.muslimpro.com/prayer-times
`

  static var methodParams: [CalculationMethod: MethodParams] = [
  .mwl: MethodParams(
    fajrAngle: 18,
    maghrib: .minutes(0),
    isha: .angles(17),
    midnight: .standard),

  .isna: MethodParams(
    fajrAngle: 15,
    maghrib: .minutes(0),
    isha: .angles(15),
    midnight: .standard),
  
  .egypt: MethodParams(
    fajrAngle: 19.5,
    maghrib: .minutes(0),
    isha: .angles(17.5),
    midnight: .standard),
  
  // fajrAngle was 19 degrees before 1430 hijri
  .makkah: MethodParams(
    fajrAngle: 18.5,
    maghrib: .minutes(0),
    isha: .minutes(90),
    midnight: .standard),
  
  .karachi: MethodParams(
    fajrAngle: 18,
    maghrib: .minutes(0),
    isha: .angles(18),
    midnight: .standard),
  
  .tehran: MethodParams(
    fajrAngle: 17.7,
    maghrib: .angles(4.5),
    isha: .angles(14),
    midnight: .jafari),
  
  .jafari: MethodParams(
    fajrAngle: 16,
    maghrib: .angles(4),
    isha: .angles(14),
    midnight: .jafari),
  
  .algeria: MethodParams(
    fajrAngle: 18,
    maghrib: .minutes(0),
    isha: .angles(17),
    midnight: .standard),
  
  .diyanet: MethodParams(
    fajrAngle: 18,
    maghrib: .minutes(0),
    isha: .angles(17),
    midnight: .standard),
  
  .egyptBis: MethodParams(
    fajrAngle: 20,
    maghrib: .minutes(0),
    isha: .angles(18),
    midnight: .standard),
  
  .fixedIsha: MethodParams(
    fajrAngle: 19.5,
    maghrib: .minutes(0),
    isha: .minutes(90),
    midnight: .standard),
  
  .uoif: MethodParams(
    fajrAngle: 12,
    maghrib: .minutes(0),
    isha: .angles(12),
    midnight: .standard),
  
  .fr15: MethodParams(
    fajrAngle: 15,
    maghrib: .minutes(0),
    isha: .angles(15),
    midnight: .standard),
  
  .fr18: MethodParams(
    fajrAngle: 18,
    maghrib: .minutes(0),
    isha: .angles(18),
    midnight: .standard),
  
  .jakim: MethodParams(
    fajrAngle: 20,
    maghrib: .minutes(0),
    isha: .angles(18),
    midnight: .standard),
  
  .muis: MethodParams(
    fajrAngle: 20,
    maghrib: .minutes(0),
    isha: .angles(18),
    midnight: .standard),
  
  .kemenag: MethodParams(
    fajrAngle: 20,
    maghrib: .minutes(0),
    isha: .angles(18),
    midnight: .standard),
  
  .tunisia: MethodParams(
    fajrAngle: 18,
    maghrib: .minutes(0),
    isha: .angles(18),
    midnight: .standard),
  
  .awqafuae: MethodParams(
    fajrAngle: 19.5,
    maghrib: .minutes(0),
    isha: .minutes(90),
    midnight: .standard),

// .uiptl: MethodParams(
// fajrAngle: 18,
// maghrib: .minutes(0),
// isha: .angles(18),
// midnight: .standard),
//
.custom: MethodParams(
fajrAngle: 18,
maghrib: .minutes(0),
isha: .angles(17),
midnight: .standard)
]
}
`

and here is the methods string names

"MWL" = "Muslim World League"; "ISNA" = "Islamic Society of North America"; "Egypt" = "Egyptian General Authority of Survey"; "Makkah" = "Umm al-Qura University, Makkah"; "Karachi" = "University of Islamic Science, Karachi"; "Tehran" = "Institute of Geophysics, University of Tehran"; "Jafari" = "Shia Ithna Ashari, Leva Research Institute, Qum"; "algeria" = "Algerian Minister of Religious Affairs and Wakfs"; "diyanet" = "Diyanet İşleri Başkanlığı"; "egyptBis" = "Egyptian General Authority (Bis)"; "fixedIsha" = "Fixed Isha Angle Interval"; "uoif" = "France UOIF - Angle 12°"; "fr15" = "France - Angle 15°"; "fr18" = "France - Angle 18°"; "jakim" = "JAKIM (Jabatan Kemajuan Islam Malaysia)"; "muis" = "MUIS (Majlis Ugama Islam Singapura)"; "kemenag" = "SIHAT/KEMENAG (Kementerian Agama RI)"; "tunisia" = "Tunisian Ministry of Religious Affairs"; "awqafuae" = "UAE General Authority of Islamic Affairs And Endowments"; "uiptl" = "London Unified Islamic Prayer Timetable";

"MWL" = "رابطة العالم الإسلامي"; "ISNA" = "الجمعية الإسلامية لأمريكا الشمالية"; "Egypt" = "الهيئة المصرية العامة للمساحة"; "Makkah" = "جامعة أم القرى"; "Karachi" = "جامعة العلوم الإسلامية بكراتشي"; "Tehran" = "معهد الجيوفيزياء ، جامعة طهران"; "Jafari" = "معهد ليفا للبحوث ، قم ، إيران"; "algeria" = "وزارة الشؤون الدينية الجزائرية والأوقاف"; "diyanet" = "مديرية الشؤون الدينية"; "egyptBis" = "الهيئة العامة المصرية (Bis)"; "fixedIsha" = "تثبيت زاوية العشاء"; "uoif" = "فرنسا UOIF ١٢°"; "fr15" = "°فرنسا ١٥"; "fr18" = "°فرنسا ١٨"; "jakim" = "إدارة التنمية الإسلامية في ماليزيا"; "muis" = "المجلس الديني الإسلامي في سنغافورة"; "kemenag" = "وزارة الشؤون الدينية"; "tunisia" = "وزارة الشؤون الدينية التونسية"; "awqafuae" = "الهيئة العامة الإماراتية للشؤون الإسلامية والأوقاف"; "uiptl" = "الجدول الزمني الموحد للصلاة الإسلامية في لندن";

print prayer times for the next 5 days

i just want to get the times for the next 5 days ,
problem that it print the same times every day
so what should i do ?

for index in 0...5{
            let kit : AKPrayerTime =  AKPrayerTime(lat: locationCoord().0, lng:locationCoord().1)
            kit.calculationMethod = .Egypt
            kit.asrJuristic  = .Shafii
            kit.outputFormat = .Date
            let nextdate = Calendar.current.date(byAdding: .day, value: index, to: Date())
            kit.calcDate = nextdate
            let kitTimes = kit.getPrayerTimes()
            
            let Fajr = kitTimes![.Fajr]
            let Dhuhr = kitTimes![.Dhuhr]
            let Asr = kitTimes![.Asr]
            let Maghrib = kitTimes![.Maghrib]
            let Isha = kitTimes![.Isha]
            print(index)
            print("current: \(String(describing: nextdate!))")
            print("Fajr: \(Fajr!)")
            print("Dhuhr: \(Dhuhr!)")
            print("Asr: \(Asr!)")
            print("Maghrib: \(Maghrib!)")
            print("Isha: \(Isha!)")
            print("-----------------------------------")
}

Adjust Isha for Um-Alqura in Ramadan

In Saudi Arabia, Isha in Ramadan is adjusted to be Maghrib + 2 Hours, I suggest modifying the following part in adjustTimes

    // Adjust Isha
    let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierIslamicUmmAlQura)
    let month = cal?.component(.CalendarUnitMonth, fromDate: NSDate())
    //If Makkah and Ramadan, the Isha is Maghrib+2.0
    if (self.calculationMethod == .Makkah && month == 9)
    {
        if (!ttimes[TimeNames.Maghrib]!.isNaN){
            ttimes[TimeNames.Isha] = ttimes[TimeNames.Maghrib]! + 2.0
        }
    }
    else {
        if params[3] == 1 { // Isha
            dTime2 = ttimes[TimeNames.Maghrib]! + Double(params[4] / 60.0)
            ttimes[TimeNames.Isha] = dTime2
        }
    }

Error in Minutes when Minutes 60

func floatToHourMinute(_ time:Double)->(hours:Int, minutes:Int)? {
    if time.isNaN {
        return nil
    }
    
    let ttime = fixHour(time + 0.5 / 60.0)  // add 0.5 minutes to round
    var hours = Int(floor(time))
    var minutes = Int(floor((ttime - Double(hours)) * 60.0))
    return (hours: hours, minutes: minutes)
}

Change to :
`
func floatToHourMinute(_ time:Double)->(hours:Int, minutes:Int)? {
if time.isNaN {
return nil
}

    let ttime = fixHour(time + 0.5 / 60.0)  // add 0.5 minutes to round
    var hours = Int(floor(time))
    var minutes = Int(floor((ttime - Double(hours)) * 60.0))
    if (minutes>=60)
    {
        hours = hours + 1
        minutes=0
    }
    return (hours: hours, minutes: minutes)
}

`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.