أوقات الصلاة

احسب الفجر والشروق والظهر والعصر والمغرب والعشاء لأي موقع بست طرق حساب، مع قواعد لخطوط العرض العالية وضبط يدوي للدقائق، وبيان ما قورن بجداول منشورة.

في هذه الصفحة
  1. نظرة عامة
  2. بداية سريعة
  3. إنشاء حاسبة
  4. الطرق والزوايا
  5. مذاهب العصر
  6. مكة: العشاء في رمضان
  7. الارتفاع عن سطح البحر
  8. المناطق الزمنية والتوقيت الصيفي
  9. الصلاة التالية
  10. خطوط العرض العالية
  11. ضبط الدقائق يدويًا
  12. الاستثناءات
  13. ما الذي فحصناه

نظرة عامة#

يحسب RtlyKit\Prayer\PrayerTimes الأوقات الستة اليومية من معادلات فلكية، دون اتصال بالشبكة ودون ملف بيانات. ميل الشمس ومعادلة الزمن مأخوذان من المتسلسلة منخفضة الدقة في كتاب Jean Meeus ‏Astronomical Algorithms (وهي المعادلات نفسها في حاسبة NOAA الشمسية). وتأتي الزاوية الساعية من حساب المثلثات الكروية، والعصر من معامل طول الظل، والشروق والغروب من ارتفاع قدره -0.833 درجة (الانكسار الجوي مع نصف قطر الشمس). أما زوايا الفجر والمغرب والعشاء فهي الاصطلاحات المنشورة لكل طريقة.

النتائج نصوص بصيغة HH:MM بالتوقيت المحلي للمنطقة الزمنية الخاصة بالحاسبة، مقرَّبة إلى أقرب دقيقة.

بداية سريعة#

use RtlyKit\Prayer\PrayerTimes;

$tz  = new DateTimeZone('Asia/Tehran');
$day = new DateTimeImmutable('2026-03-21 12:00', $tz);

$times = PrayerTimes::forCity('tehran')->getTimes($day);
echo json_encode($times);
// {"fajr":"04:43","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:35","isha":"19:22"}

إذا حذفت التاريخ، تستخدم getTimes() تاريخ اليوم بحسب المنطقة الزمنية للحاسبة. والتاريخ الذي تمرّره يحدد اليوم التقويمي المحلي لتلك المنطقة. وهناك أيضًا اختصار ضمن فضاء الأسماء يُرجع المصفوفة نفسها لليوم الحالي: \RtlyKit\prayer_times('tehran', 'Tehran') (انظر الدوال المساعدة والدوال العامة).

إنشاء حاسبة#

هناك طريقتان لبنائها.

// 1) مدينة مضمَّنة: تُملأ الإحداثيات والمنطقة الزمنية.
$p = PrayerTimes::forCity('mecca', PrayerTimes::METHOD_MAKKAH);

// 2) إحداثياتك الخاصة.
$p = new PrayerTimes(
    latitude:  35.6892,
    longitude: 51.3890,
    method:    PrayerTimes::METHOD_TEHRAN,   // default
    asrFactor: PrayerTimes::ASR_STANDARD,    // default
    timezone:  new DateTimeZone('Asia/Tehran'), // default: date_default_timezone_get()
    elevation: 0.0,                          // metres, default 0
);

تعرف forCity() هذه الأسماء (دون حساسية لحالة الأحرف): tehran وmashhad وisfahan وshiraz وtabriz وqom وmecca وmedina وriyadh وistanbul وcairo وdubai وbaghdad وjakarta. وأي اسم آخر يُثير استثناءً؛ للمدن الأخرى استخدم المُنشئ مع إحداثياتك.

الطرق والزوايا#

تحدد الطريقة زاوية انخفاض الشمس للفجر والعشاء (وللمغرب أيضًا في طريقة طهران). استخدم ثوابت الصنف بدلًا من النصوص.

الثابتالفجرالمغربالعشاء
METHOD_TEHRAN (Tehran، الافتراضي)17.7 درجةالشمس على بعد 4.5 درجة تحت الأفق14 درجة
METHOD_MWL (MWL)18 درجةالغروب17 درجة
METHOD_ISNA (ISNA)15 درجةالغروب15 درجة
METHOD_EGYPT (Egypt)19.5 درجةالغروب17.5 درجة
METHOD_MAKKAH (Makkah)18.5 درجةالغروبالمغرب + 90 دقيقة (+120 دقيقة في رمضان)
METHOD_KARACHI (Karachi)18 درجةالغروب18 درجة

اليوم نفسه في طهران محسوبًا بكل طريقة (الفجر والمغرب والعشاء فقط تختلف؛ أما الشروق والظهر والعصر فلا تعتمد على الطريقة):

foreach (['Tehran', 'MWL', 'ISNA', 'Egypt', 'Makkah', 'Karachi'] as $m) {
    echo str_pad($m, 8), json_encode(PrayerTimes::forCity('tehran', $m)->getTimes($day)), "\n";
}
// Tehran  {"fajr":"04:43","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:35","isha":"19:22"}
// MWL     {"fajr":"04:42","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:17","isha":"19:37"}
// ISNA    {"fajr":"04:57","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:17","isha":"19:27"}
// Egypt   {"fajr":"04:34","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:17","isha":"19:40"}
// Makkah  {"fajr":"04:39","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:17","isha":"19:47"}
// Karachi {"fajr":"04:42","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:17","isha":"19:42"}

الظهر هو منتصف النهار الشمسي (عبور الشمس للزوال)، ولا يُضاف أي هامش احتياط إلى أي وقت.

مذاهب العصر#

يبدأ العصر حين يساوي ظلّ الجسم ظلّه وقت الزوال مضافًا إليه مضاعف لارتفاعه. يُستخدم ASR_STANDARD (القيمة 1، أي مثل الارتفاع) عند المذاهب الشافعي والمالكي والحنبلي والجعفري؛ أما ASR_HANAFI (القيمة 2، أي مثلا الارتفاع) فيعطي وقتًا أكثر تأخرًا.

$hanafi = PrayerTimes::forCity('tehran', 'Tehran', PrayerTimes::ASR_HANAFI);
echo $hanafi->getTimes($day)['asr'];   // 16:32  (standard: 15:39)

مكة: العشاء في رمضان#

يحدد اصطلاح أم القرى العشاء بعد المغرب بـ 90 دقيقة، وبـ 120 دقيقة في رمضان. تختار الحاسبة 120 حين يقع التاريخ المدني المحلي في رمضان بحسب جدول أم القرى الهجري الخاص بالحزمة (الشهر 9)، وتختار 90 فيما عدا ذلك. والقرار يتبع التاريخ المدني، لا اليوم الإسلامي الذي يبدأ من الغروب.

$mk = PrayerTimes::forCity('mecca', 'Makkah');
foreach (['2026-02-20', '2026-03-01', '2026-03-21'] as $s) {
    $t = $mk->getTimes(new DateTimeImmutable($s, new DateTimeZone('Asia/Riyadh')));
    echo $s, ' maghrib ', $t['maghrib'], ' isha ', $t['isha'], "\n";
}
// 2026-02-20 maghrib 18:21 isha 20:21   (+120, Ramadan)
// 2026-03-01 maghrib 18:25 isha 20:25   (+120, Ramadan)
// 2026-03-21 maghrib 18:32 isha 20:02   (+90, after Ramadan)

الارتفاع عن سطح البحر#

الوسيط elevation هو ارتفاع الراصد بالأمتار. يخفض ارتفاع الشروق والغروب بالانخفاض الهندسي للأفق 0.0347 * sqrt(h) درجة، فيصبح الشروق أبكر والغروب أكثر تأخرًا على الجبل. القيم السالبة تُعامل على أنها 0. ويؤثر في الشروق والغروب والأوقات المشتقة من الغروب فقط.

$a = new PrayerTimes(35.6892, 51.3890, 'Tehran', 1, $tz);
$b = new PrayerTimes(35.6892, 51.3890, 'Tehran', 1, $tz, 1500.0);
$d = new DateTimeImmutable('2026-06-21', $tz);
echo $a->getTimes($d)['sunrise'], "\n"; // 04:49
echo $b->getTimes($d)['sunrise'], "\n"; // 04:41

في طريقة طهران يتحدد المغرب بزاوية 4.5 درجة وليس بالغروب، فلا يتغير مع الارتفاع (19:45 في الحالتين أعلاه).

المناطق الزمنية والتوقيت الصيفي#

يُحوَّل كل وقت باستخدام فرق التوقيت الفعلي عن UTC للمنطقة في تلك اللحظة، فيُعالَج تغيير التوقيت الصيفي في منتصف العام دون أي عمل إضافي. تتغير برلين في 2026-03-29:

$tzb = new DateTimeZone('Europe/Berlin');
$ber = new PrayerTimes(52.52, 13.405, 'MWL', 1, $tzb);
foreach (['2026-03-28', '2026-03-29'] as $s) {
    echo $s, ' ', json_encode($ber->getTimes(new DateTimeImmutable($s, $tzb))), "\n";
}
// 2026-03-28 {"fajr":"03:51","sunrise":"05:50","dhuhr":"12:11","asr":"15:39","maghrib":"18:34","isha":"20:26"}
// 2026-03-29 {"fajr":"04:48","sunrise":"06:48","dhuhr":"13:11","asr":"16:40","maghrib":"19:35","isha":"21:28"}

مرّر المنطقة التي يقرأ مستخدموك الساعة بحسبها. وإذا أهملتها يُستخدم date_default_timezone_get().

الصلاة التالية#

تُرجع nextPrayer() أول صلاة تقع بعد لحظة معينة بدقة (الافتراضي: الآن). تقارن الدالة أوقات أمس واليوم وغد، فتجد الصلاة التي تقع بعد منتصف الليل مع تاريخها الصحيح في الحقل date. وبعد العشاء تنتقل إلى فجر الغد.

$p = PrayerTimes::forCity('tehran');
echo json_encode($p->nextPrayer(new DateTimeImmutable('2026-03-21 10:00', $tz)));
// {"name":"dhuhr","time":"12:12","date":"2026-03-21"}
echo json_encode($p->nextPrayer(new DateTimeImmutable('2026-03-21 20:00', $tz)));
// {"name":"fajr","time":"04:42","date":"2026-03-22"}

ويظهر أثر ذلك في الصيف شمالًا، حيث قد يقع العشاء بعد منتصف الليل (أوسلو، 21 يونيو):

$tzo = new DateTimeZone('Europe/Oslo');
$osl = new PrayerTimes(59.91, 10.75, 'MWL', 1, $tzo);
echo json_encode($osl->nextPrayer(new DateTimeImmutable('2026-06-21 23:30', $tzo)));
// {"name":"isha","time":"00:12","date":"2026-06-22"}

الشروق عنصر في هذا التسلسل (الترتيب: fajr وsunrise وdhuhr وasr وmaghrib وisha).

خطوط العرض العالية#

في الصيف، بعيدًا عن خط الاستواء، قد لا تبلغ الشمس زاوية الفجر أو العشاء أصلًا، أو تبلغها في ساعة بعيدة جدًا عن الشروق والغروب. تعالج المكتبة ذلك بقاعدة من RtlyKit\Prayer\HighLatitudeRule تختارها بـ withHighLatitudeRule() (تُرجع حاسبة جديدة):

القاعدةما تفعله
AngleBased (الافتراضي)تحدّ الفجر والعشاء بجزء من الليل يساوي الزاوية ÷ 60 (للزاوية 18 درجة: 0.3 من الليل)
NightMiddleالجزء نصف الليل
OneSeventhالجزء سُبع الليل
Noneلا تعديل: الوقت الذي لا تبلغ الشمس زاويته يكون null

الليل هنا من الغروب إلى شروق اليوم التالي. القاعدة تعمل فقط حين يتعذر حساب الوقت أو يقع خارج الحد؛ وكل وقت آخر يبقى بقيمته الفلكية. ولذلك فالحسابات جنوب نحو 44 درجة شمالًا لم تتغير. وبين نحو 44 و46 درجة شمالًا قرب 21 يونيو تختلف بعض قيم الفجر والعشاء عن الإصدارات 0.1.x، وتُعيد None الناتج القديم. (ميونخ، 21 يونيو، MWL):

use RtlyKit\Prayer\HighLatitudeRule;

$tzm = new DateTimeZone('Europe/Berlin');
$day = new DateTimeImmutable('2026-06-21', $tzm);
$muc = new PrayerTimes(48.14, 11.58, 'MWL', 1, $tzm);

echo json_encode($muc->getTimes($day)), "\n";
// {"fajr":"02:51","sunrise":"05:13","dhuhr":"13:15","asr":"17:31","maghrib":"21:18","isha":"23:32"}
echo json_encode($muc->withHighLatitudeRule(HighLatitudeRule::None)->getTimes($day)), "\n";
// {"fajr":"01:50","sunrise":"05:13","dhuhr":"13:15","asr":"17:31","maghrib":"21:18","isha":"00:12"}
echo json_encode($muc->withHighLatitudeRule(HighLatitudeRule::OneSeventh)->getTimes($day)), "\n";
// {"fajr":"04:05","sunrise":"05:13","dhuhr":"13:15","asr":"17:31","maghrib":"21:18","isha":"22:26"}

وفي أوسلو في اليوم نفسه، حيث لا تبلغ الشمس زاويتي الفجر والعشاء إطلاقًا، تعطي القاعدة الافتراضية قيمتين بدل null (راجع أيضًا العشاء بعد منتصف الليل في القسم السابق):

$day = new DateTimeImmutable('2026-06-21', $tzo);

echo json_encode($osl->getTimes($day)), "\n";
// {"fajr":"02:21","sunrise":"03:54","dhuhr":"13:19","asr":"18:00","maghrib":"22:44","isha":"00:12"}
echo json_encode($osl->withHighLatitudeRule(HighLatitudeRule::None)->getTimes($day)), "\n";
// {"fajr":null,"sunrise":"03:54","dhuhr":"13:19","asr":"18:00","maghrib":"22:44","isha":null}

وفي النهار القطبي (ترومسو، 21 يونيو) لا تشرق الشمس ولا تغرب، فيبقى الشروق والمغرب null، ويُحسب الفجر والعشاء من ليلة مرجعية مدتها 12 ساعة. وهذا اصطلاح اخترناه في المكتبة وليس اصطلاحًا منشورًا؛ ومن يريد سلوكًا آخر (أقرب يوم أو أقرب خط عرض) فليستعمل None ويقرر بنفسه.

$tro = new PrayerTimes(69.65, 18.96, 'MWL', 1, $tzo);
echo json_encode($tro->getTimes($day)), "\n";
// {"fajr":"03:10","sunrise":null,"dhuhr":"12:46","asr":"17:58","maghrib":null,"isha":"22:10"}

ضبط الدقائق يدويًا#

تعتمد بعض المساجد والجهات هامش احتياط في بعض الأوقات. استعمل withTune() لإضافة دقائق (من -30 إلى +30) إلى أي من الأوقات الستة: fajr وsunrise وdhuhr وasr وmaghrib وisha. تُرجع الدالة حاسبة جديدة، وما لم تذكره يبقى صفرًا؛ فاستدعاؤها يستبدل أي ضبط سابق، وwithTune([]) يمسحه. وتدخل الدقائق المضافة في nextPrayer() أيضًا.

$p = PrayerTimes::forCity('tehran');

echo json_encode($p->withTune(['fajr' => 2, 'maghrib' => 3])->getTimes($day)), "\n";
// {"fajr":"04:45","sunrise":"06:07","dhuhr":"12:12","asr":"15:39","maghrib":"18:38","isha":"19:22"}

تُضاف الدقائق قبل التقريب، فقد ينتقل الوقت عبر منتصف الليل (23:50 مع +20 يصبح 00:10). والمفتاح غير المعروف، والقيمة التي ليست int أو الخارجة عن المجال، تُثير InvalidPrayerConfigException مع السياق key.

الاستثناءات#

الإعداد غير الصالح يُثير InvalidPrayerConfigException، وهي ترث RtlyKitException (ومن ثَمّ \InvalidArgumentException)، مثلًا:

new PrayerTimes(35, 51, 'Foo');
// Unknown calculation method: Foo. Available: MWL, ISNA, Egypt, Makkah, Karachi, Tehran
new PrayerTimes(35, 51, 'MWL', 3);
// Invalid Asr factor: 3 (use 1 or 2)
PrayerTimes::forCity('paris');
// Unknown city: paris
PrayerTimes::forCity('tehran')->withTune(['fajr' => 31]);
// Tune for fajr must be an integer from -30 to 30 minutes

انظر معالجة الأخطاء لالتقاط كل أخطاء المكتبة بعبارة catch واحدة.

ما الذي فحصناه#

الزوايا اصطلاحات تحددها الجهة التي تعرّف كل طريقة، والمكتبة مكتوبة مستقلة عن أي برنامج آخر. لذلك الفحص المفيد هو مقارنة مخرجاتنا لمدينة وتاريخ معينين بالجدول الذي تنشره الجهة المعنية. اعتبرنا الفرق ضمن دقيقة إلى دقيقتين توافقًا، لأن الجداول مقرّبة إلى الدقيقة. وجرى الفحص في 2026-10-08. أما المواقع المجمِّعة فلم نحتسبها دليلًا، لأنها تستعمل الزوايا المنشورة نفسها.

ما قورنالمرجعالنتيجة
طريقة طهران: الفجر والشروق والظهر والمغربجداول معهد الجيوفيزياء بجامعة طهران لعام 1405: طهران ومشهد وأصفهان وشيراز في أربعة تواريختطابق حتى الدقيقة في كل القيم عدا فرق دقيقة واحدة في شيراز
طريقة مكة: الأوقات الستة، ومنها عشاء رمضانتقويم أم القرى الرسمي: خمسة تواريخ خارج رمضان وتاريخان في رمضان 1447ضمن دقيقة واحدة، والعشاء = المغرب + 120 في رمضان
طريقة مصر: الأوقات الستةجدول دار الإفتاء المصرية للقاهرة، أكتوبر 2026ضمن دقيقة واحدة
تركيا (ديانت): الفجر والعشاءجداول رئاسة الشؤون الدينية التركية لإسطنبول وأنقرة وإزميرمتسقة مع زاويتي 18 / 17 نفسيهما، ضمن دقيقة واحدة
طريقة كراتشي مع العصر الحنفيجدول منشور لجامعة في كراتشي (جامعة العلوم الإسلامية، بنوري تاون)، أكتوبر 2026 كله (31 يومًا)ضمن دقيقة واحدة في كل الأيام
كراتشي (18 / 18)ماليزيا، JAKIM e-solat، المنطقة SGR01: أربعة تواريخ في أكتوبر 2026الفجر والعشاء يختلفان بدقيقة إلى دقيقتين، وهذا يوافق 18 / 18
قاعدة العصر الحنفي (ظل = مثلان)فتاوى دار العلوم ديوبندهي القاعدة التي تحسبها المكتبة بالمعامل 2
طريقة ISNA (15 / 15)المجلس الفقهي لأمريكا الشماليةالزاويتان 15 / 15 هما المذكورتان للإعداد الموافق لـ ISNA
الشروق والغروبعينات من مدن وتواريخ مقابل حاسبة NOAA الشمسية وموقع timeanddateضمن دقيقة واحدة
من المفيد أن تعرف. لم نجد جدولًا صادرًا عن الجهة المعرِّفة نفسها لطرق كراتشي (جامعة العلوم الإسلامية) وISNA ورابطة العالم الإسلامي، ولا جدولًا رسميًا لعشاء طهران (14 درجة) وعصرها، فلم يمكن مقارنتها. وقاعدة النهار القطبي اصطلاح داخلي في المكتبة. وهذه أوقات حسابية: للاستخدام الديني أو القانوني قارن بجدول الجهة المحلية المختصة.

تطابق طريقة طهران جداول معهد الجيوفيزياء، وقد أكّد هذا التطابق العددي الزاويتين 17.7 درجة (الفجر) و4.5 درجة (المغرب). وللتفاصيل عن بقية البيانات انظر الدقة والبيانات.