Skip to the guide
All guides

أوقات الصلاة

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

app RTLY-Kit 0.3.0checked reading 13 minutes

On this page

نظرة عامة

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

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

بداية سريعة

PHP
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') (انظر الدوال المساعدة والدوال العامة).

إنشاء حاسبة

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

PHP
// 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
);

يفحص المُنشئ الأعداد: خط العرض من -90 إلى 90، وخط الطول من -180 إلى 180، والارتفاع من -20000 إلى 20000 متر. وNaN واللانهاية والقيم خارج هذه النطاقات تُطلق InvalidPrayerConfigException.

تعرف 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 درجة

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

PHP
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"}

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

مذاهب العصر

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

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

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

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

PHP
$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 (والنطاق المقبول من -20000 إلى 20000). ويؤثر في الشروق والغروب والأوقات المشتقة من الغروب فقط.

PHP
$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:

PHP
$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"}

قد تبعد المنطقة الزمنية كثيرًا عن خط طولها، مثل Pacific/Kiritimati (UTC+14 عند خط الطول 157 غربًا). ومع ذلك تُرجع الحاسبة أوقات اليوم الذي تطلبه: فالأوقات الستة كلها تقع في ذلك التاريخ المحلي. ولذلك يكون الظهر في كيريتيماتي نحو 12:29 لا نحو 12:00.

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

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

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

PHP
$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 يونيو):

PHP
$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). ويجب أن تقع التواريخ في السنوات من 1 إلى 9999 بحسب المنطقة الزمنية: وخارجها تُطلق getTimes() وnextPrayer() الاستثناء InvalidDateException. والصلاة التي يقع تاريخها المحلي بعد 9999-12-31 (أو قبل 0001-01-01) غير موجودة: ففي getTimes() يكون وقتها null، وتُرجع nextPrayer() القيمة null عندما لا تبقى صلاة حتى نهاية 9999-12-31. ويُقرَّب الوقت إلى أقرب دقيقة بحسب إزاحة UTC الدقيقة للمنطقة، فالمنطقة ذات الإزاحة القديمة التي فيها ثوانٍ (مثل التوقيت المحلي المتوسط قبل 1970) لا يُقصّ وقتها إلى دقائق كاملة.

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

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

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

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

PHP
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 (راجع أيضًا العشاء بعد منتصف الليل في القسم السابق):

PHP
$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 يونيو) يبقى sunrise وmaghrib بقيمة null. ويكون dhuhr معرَّفًا دائمًا. ويكون asr بقيمة null حين لا ترتفع الشمس ذلك اليوم بما يكفي ليبلغ الظل طول العصر، ويشمل ذلك الليل القطبي. ويأتي الفجر والعشاء حينئذ من القاعدة، بليلة مرجعية مدتها 12 ساعة حول الزوال الشمسي. وهذا اصطلاح اخترناه في المكتبة وليس اصطلاحًا منشورًا. ومن يريد اصطلاحًا آخر فليستعمل HighLatitudeRule::None ويقرر بنفسه.

PHP
$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"}

تحافظ الأوقات الستة على الترتيب fajr وsunrise وdhuhr وasr وmaghrib وisha (بوصفها لحظات؛ وقد يقع العشاء بعد منتصف الليل، ويجوز تساوي الدقائق). وقرب القطبين قد تكسره هندسة الشمس، كأن يقع العصر بعد العشاء عند 89.9 درجة. والوقت الذي يكسر الترتيب يكون null. وفي خطوط العرض العادية لا يُحذف أي وقت بهذه الطريقة. ويُطبَّق الضبط اليدوي بعد هذا الفحص. وفي طريقة طهران يبقى المغرب قبل العشاء مع القاعدتين OneSeventh وNightMiddle.

من المفيد أن تعرف. القاعدة الافتراضية هي AngleBased. وتحت خط العرض 44 شمالًا تقريبًا تطابق كل الأوقات الإصدار 0.1.x. وشمال 44 إلى 46 درجة تقريبًا، قرب انقلاب يونيو، تختلف بعض قيم الفجر والعشاء عن 0.1.x، ويصبح للوقت الذي كان null قيمة. وللحصول على الناتج القديم استدعِ withHighLatitudeRule(HighLatitudeRule::None).

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

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

PHP
$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)، مثلًا:

PHP
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
new PrayerTimes(95, 51, 'MWL');
// The latitude must be between -90 and 90 degrees
$p->withTune(['fajr' => 31]);
// Tune for fajr must be an integer from -30 to 30 minutes

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

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

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

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

من المفيد أن تعرف. صفحات بنوري تاون وديانت وJAKIM لا تذكر زواياها، فهذه المقارنات تبيّن أن جداولها تناسب زوايانا. ولم نجد جداول صادرة عن جامعة العلوم الإسلامية في كراتشي ولا عن ISNA ولا عن رابطة العالم الإسلامي، ولا جدولًا رسميًا لطهران فيه العشاء والعصر. وتنسب صفحات ثانوية زاوية عشاء طهران، 14 درجة، إلى معهد لوا في قم. أما خطوط العرض العالية والارتفاع والتواريخ غير المذكورة فقد قورنت بحسابات مستقلة لا بجداول منشورة. وللاستخدام الديني أو القانوني قارن بجدول الجهة المحلية المختصة. وللتفاصيل عن بقية البيانات انظر الدقة والبيانات.