Skip to the guide
All guides

الحدود

كل الحدود الصارمة في مكان واحد: نطاقات السنوات المدعومة، وسقوف حجم المُدخَلات، ونطاقات الأعداد بالكلمات، ونطاق أم القرى، وسائر الحدود الرقمية في المكتبة.

app RTLY-Kit 0.2.0checked reading 5 minutes

On this page

هذه الحدود مقصودة. فهي تُبقي كل استدعاء رخيصًا ويمكن التنبؤ به، وتمنع المُدخَلات غير الموثوقة من أن تتحول إلى تاريخ ملتفّ أو إلى عملية حسابية مكلفة. وتجاوز أي حد يرفع دائمًا استثناء RtlyKitException موثَّقًا (انظر معالجة الأخطاء)، أو Result غير صالح في حالة أدوات التحقق.

نطاقات سنوات التقاويم

كل تاريخ مدعوم في أي تقويم يقابل سنة ميلادية بين 1 و9999، فيمكن لـ DateTimeImmutable أن يحتفظ بأي قيمة تنتجها الفئات دون التفاف. والنطاقات هي الثوابت العامة MIN_YEAR وMAX_YEAR:

التقويمMIN_YEARMAX_YEARالتاريخ الميلادي لـ 1/1 من هاتين السنتين
Jalali-62093770001-03-21 .. 9998-03-20
Hijri196650622-07-19 .. 9998-10-12
Hebrew3762137590001-09-06 .. 9998-10-15
PHP
<?php
require __DIR__.'/vendor/autoload.php';

use RtlyKit\Calendar\{Hebrew, Hijri, Jalali};

foreach ([Jalali::class, Hijri::class, Hebrew::class] as $class) {
    printf(
        "%-7s %5d..%-5d  %s .. %s\n",
        (new ReflectionClass($class))->getShortName(),
        $class::MIN_YEAR,
        $class::MAX_YEAR,
        $class::create($class::MIN_YEAR, 1, 1)->toGregorian()->format('Y-m-d'),
        $class::create($class::MAX_YEAR, 1, 1)->toGregorian()->format('Y-m-d'),
    );
}
// Jalali   -620..9377   0001-03-21 .. 9998-03-20
// Hijri       1..9665   0622-07-19 .. 9998-10-12
// Hebrew   3762..13759  0001-09-06 .. 9998-10-15

تلتزم كل نقاط الدخول بالنطاق: make وcreate وcreateFromFormat والطوابع الزمنية (timestamp) في Unix وadd*() / sub*() (بما فيها الفروق الضخمة) والدوال المساعدة وماكروات Carbon. والقيمة الواقعة خارج النطاق تُلقي InvalidDateException؛ ولا شيء يُرجع تاريخًا ملتفّاً، ولا يتسرّب أي TypeError أو ValueError.

الفروق والطوابع الزمنية

  • أي مقدار في addDays() / subDays() (وفي الساعات والدقائق والثواني) يزيد على مدى التقويم المدعوم كله (نحو 3.7 مليون يوم، أو المدى نفسه بالساعات أو الدقائق أو الثواني) يُرفض مسبقًا بـ InvalidDateException ؛ كما يُرفض المقدار الأصغر الذي ينتهي خارج السنوات المدعومة.
  • يجب أن يقع الطابع الزمني (timestamp) في Unix ضمن السنوات الميلادية من 1 إلى 9999 (مع هامش صغير للمنطقة الزمنية)؛ وما كان أبعد من ذلك يُرفض.
  • تعمل Hebrew::addMonths() و addYears() في زمن ثابت، مهما كبر المقدار.

عتبات السنة في المُدخَلات النصية

النص مثل 1405/01/01 أو 1405-01-01 الممرَّر إلى make() أو إلى دالة مساعدة يُقرأ على أنه تاريخ التقويم نفسه إذا كانت السنة دون العتبة، وعلى أنه نص ميلادي فيما عدا ذلك:

الفئةسنة التقويم نفسهغير ذلك
Jalali / jdate()أقل من 1700ميلادي
Hijri / hdate()أقل من 1700ميلادي
Hebrew / hebrew_date()3000 أو أكثرميلادي

لتمرير تاريخ ميلادي حقيقي دون العتبة (مثل السنة 999) استخدم DateTimeImmutable الذي لا يُعاد تفسيره أبدًا. انظر الأسئلة الشائعة.

نطاق أم القرى

  • يغطي جدول أشهر أم القرى المدمج السنوات 1300 إلى 1500 هـ (من 1882-11-12 إلى 2077-11-16). وخارجه، وفي HijriVariant::Tabular دائمًا، تستخدم Hijri قواعد حسابية قد تختلف عن الرصد بيوم أو يومين. وتخبرك Hijri::hasUmmAlQuraData($year) ما إذا كانت السنة مغطاة. والسنوات 1318 إلى 1500 هـ هي التي قورنت بتقويم KACST الرسمي ( Hijri::ummAlQuraVerifiedRange() ).
  • تستعمل IranHolidays تواريخ رسمية أو منقولة للسنوات الجلالية 1380 إلى 1405. وفي السنوات الأخرى لا تُبلغ عن العطل الإسلامية إلا داخل نطاق أم القرى. وخارجه، ولسنوات ما قبل بداية التقويم الهجري، لا تُرجع إلا العطل الجلالية الثابتة دون استثناء. وتعمل all() و allTitles() و allFixed() لكل سنة جلالية من -620 إلى 9377.

سقوف حجم المُدخَلات

الموضعالحدعند التجاوز
أدوات التحقق (NationalCode وSheba وBankCard وMobile وPostalCode وVehiclePlate)4096 بايت لكل نصResult غير صالح، والخطأ input_too_long
NumberToWords::convert() وfromWords() (مُدخَل نصي)4096 بايتInvalidNumberException، input_too_long
المُدخَل النصي لـ Format (withSeparator())4096 بايتInvalidNumberException، input_too_long
Format::withSeparator() / format_number()1000 نويسة في العدد العشري العادي (أرقام الجزء الصحيح والكسري معًا)InvalidNumberException، input_too_long
فاصل Slugify::make()64 بايتاً، بترميز UTF-8 صالحRtlyKitException (input_too_long / invalid_argument)
نمط Jalali::format()256 بايتًا (Jalali::MAX_FORMAT_LENGTH)InvalidDateException

السقوف جزء من العقد (انظر استقرار الواجهة).

نطاقات الأعداد

الدالةالنطاقما بعده
number_to_words($n) (الفارسية، الافتراضي)أعداد صحيحة حتى 21 رقمًا (أقل من 10^21) والأعداد السالبةInvalidNumberException، number_too_large
number_to_words($n, 'ar') وNumberToWords::convert($n, 'ar', $options)أعداد صحيحة أقل من 10^27 والأعداد السالبةInvalidNumberException، number_too_large
NumberToWords::ordinal($n, 'ar')من 1 إلى 99InvalidNumberException (invalid_number للصفر وما دونه، number_too_large فوق 99)
number_to_words($n, 'de') أو أي لغة (locale) أخرىfa وar فقطUnsupportedLocaleException
NumberToWords::convert()، Format::ordinal()أعداد صحيحة؛ وتُقبل الأعداد العشرية ذات القيمة الصحيحة مثل 3.0InvalidNumberException مع 1.5 وNaN وINF
Format::ordinal()أعداد صحيحة غير سالبةInvalidNumberException
PHP
use function RtlyKit\number_to_words;

echo number_to_words(999999999, 'ar'), "\n";
// تسعمئة وتسعة وتسعون مليون وتسعمئة وتسعة وتسعون ألف وتسعمئة وتسعة وتسعون
// number_to_words(str_repeat('9', 27), 'ar') تُثير InvalidNumberException (number_too_large, limit "10^27 - 1")
// number_to_words(str_repeat('9', 22)) تُثير InvalidNumberException (number_too_large, limit "10^21 - 1")

نطاقات الإعدادات

الإعدادالنطاقما بعده
HolidayCalendar::withIslamicOffset()من -3 إلى +3 أيامInvalidDateException
HolidayCalendar::withHijriMonthStart()ضمن 3 أيام من البداية المحسوبة، وبفارق 29 أو 30 يومًا عن بداية شهر مجاور أعطيتهInvalidDateException
PrayerTimes::withTune()من -30 إلى +30 دقيقة، أعداد صحيحة، لـ fajr وsunrise وdhuhr وasr وmaghrib وishaInvalidPrayerConfigException

حدود تغطية البيانات

البياناتالتغطية
رموز BIN للبطاقات المصرفية39 رمز BIN؛ والبقية تُرجع null من getBankName()
رموز المصارف في شبا38 رمزاً؛ والبقية تُرجع null
مكان إصدار الرقم الوطني547 بادئة؛ والبقية تُرجع null
تواريخ العطل الرسميةالسنوات الجلالية 1394 و1396 إلى 1405 (رسمية)، و1380 إلى 1393 و1395 (منقولة). والسنوات الأخرى تقديرية
مدن أوقات الصلاة (PrayerTimes::forCity())14: tehran, mashhad, isfahan, shiraz, tabriz, qom, mecca, medina, riyadh, istanbul, cairo, dubai, baghdad, jakarta. ولأي مكان آخر استخدم new PrayerTimes($lat, $lng, ...).
طرائق أوقات الصلاةTehran وMWL وISNA وEgypt وMakkah وKarachi؛ ومعامل العصر 1 (القياسي) أو 2 (الحنفي)
أوقات الصلاة في خطوط العرض العاليةتملأ القاعدة الافتراضية الوقت الذي لا تستطيع الشمس أن تنتجه. ومع HighLatitudeRule::None يكون ذلك الوقت null وليس خطأً

انظر الدقة والبيانات لمعرفة الأساس الذي تقوم عليه هذه الجداول.

حدود المنصة

PHP من 8.2 إلى 8.5 دون أي امتداد إضافي؛ وLaravel 11 و12 و13؛ وCarbon 3. انظر استقرار الواجهة.