0Pricing
PHP Academy · درس

حساب التواريخ باستخدام DateInterval

أضيفوا الفترات الزمنية واطرحوها باستخدام DateInterval وmodify()

حساب التواريخ باستخدام DateInterval درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

نظرة عامة على DateInterval

تمثّل DateInterval مدةً زمنية، مثل الأيام والأشهر والساعات وغير ذلك. وهي الطريقة الكائنية في PHP لإضافة الوقت إلى كائنات DateTime أو طرحه منها.

إنشاء DateInterval

أنشئ DateInterval باستخدام صيغة مدة ISO 8601:

<?php
// P = period, T = time separator
$oneYear  = new DateInterval('P1Y');    // 1 year
$sixMonths = new DateInterval('P6M');   // 6 months
$tenDays  = new DateInterval('P10D');   // 10 days
$twoHours = new DateInterval('PT2H');   // 2 hours (T before time)
$complex  = new DateInterval('P1Y2M3DT4H5M6S');

echo $oneYear->y;    // 1
echo $tenDays->d;    // 10

add() وsub()

أضف DateInterval إلى DateTime أو اطرحه منه:

<?php
$dt = new DateTime('2024-01-01');

$dt->add(new DateInterval('P1Y'));   // +1 year
echo $dt->format('Y-m-d');  // 2025-01-01

$dt->sub(new DateInterval('P3M'));   // -3 months
echo $dt->format('Y-m-d');  // 2024-10-01

diff() بين تاريخين

تعيد diff() كائن DateInterval يمثّل الفرق بين تاريخين:

<?php
$start = new DateTime('2024-01-01');
$end   = new DateTime('2024-06-15');

$diff = $start->diff($end);

echo $diff->y;  // years
echo $diff->m;  // months
echo $diff->d;  // days
echo $diff->h;  // hours
echo $diff->days; // total days: 166

فروق قابلة للقراءة البشرية

نسّق DateInterval لعرضه:

<?php
$birthdate = new DateTime('1990-05-15');
$today     = new DateTime();
$age       = $birthdate->diff($today);

echo $age->y . ' years, ' . $age->m . ' months, ' . $age->d . ' days';

// Check if date is in the past
if ($diff->invert === 1) {
    echo 'Date was in the past';
}

DateInterval::createFromDateString()

أنشئ DateInterval من سلسلة نصية بلغة طبيعية:

<?php
$interval = DateInterval::createFromDateString('1 year 2 months 3 days');

$dt = new DateTime('2024-01-01');
$dt->add($interval);
echo $dt->format('Y-m-d');  // 2025-03-04

// Other examples:
DateInterval::createFromDateString('next monday');
DateInterval::createFromDateString('6 weeks');

DatePeriod — التكرار عبر النطاقات

يتيح لك DatePeriod التكرار عبر نطاق من التواريخ بفواصل زمنية منتظمة:

<?php
$start    = new DateTime('2024-01-01');
$interval = new DateInterval('P1M');  // monthly
$end      = new DateTime('2024-06-01');

$period = new DatePeriod($start, $interval, $end);

foreach ($period as $date) {
    echo $date->format('Y-m') . PHP_EOL;
}
// 2024-01, 2024-02, 2024-03, 2024-04, 2024-05

استخدام DatePeriod للتقارير الأسبوعية

أنشئ نقاطًا زمنية أسبوعية:

<?php
$start    = new DateTime('2024-01-01');
$interval = new DateInterval('P7D');  // weekly
$end      = new DateTime('2024-02-01');

$weeks = new DatePeriod($start, $interval, $end);
foreach ($weeks as $week) {
    echo 'Week of: ' . $week->format('Y-m-d') . PHP_EOL;
}

مقارنة الفواصل الزمنية

قارن مقدار كائنَي DateInterval بتحويلهما إلى إجمالي عدد الأيام:

<?php
$a = new DateTime('2024-01-01');
$b = new DateTime('2024-06-01');
$c = new DateTime('2025-01-01');

$diff1 = $a->diff($b)->days;  // 152
$diff2 = $a->diff($c)->days;  // 366

echo ($diff1 < $diff2) ? 'First interval shorter' : 'First interval longer';
// First interval shorter

حساب أيام العمل

احسب عدد أيام العمل بين تاريخين:

<?php
function businessDays(DateTime $from, DateTime $to): int {
    $count = 0;
    $cur   = clone $from;
    while ($cur < $to) {
        $dow = (int) $cur->format('N'); // 1=Mon ... 7=Sun
        if ($dow < 6) $count++;
        $cur->modify('+1 day');
    }
    return $count;
}

$from = new DateTime('2024-05-27');
$to   = new DateTime('2024-06-07');
echo businessDays($from, $to) . ' business days';

نمط تاريخ الانتهاء

نمط شائع لانتهاء صلاحية الاشتراكات أو الرموز باستخدام DateInterval:

<?php
function expiresAt(string $duration = 'P30D'): string {
    $dt = new DateTimeImmutable();
    return $dt->add(new DateInterval($duration))->format('Y-m-d H:i:s');
}

echo expiresAt('P30D');   // 30-day trial expiry
echo expiresAt('P1Y');    // 1-year subscription expiry
echo expiresAt('PT1H');   // 1-hour token expiry

تحقق سريع

ماذا تعيد $dateA->diff($dateB)->days؟

مراجعة: DateInterval

النقاط الأساسية:

  • new DateInterval('P1Y2M3DT4H') — مدة بصيغة ISO 8601
  • استخدم add()/sub() لتعديل DateTime
  • تعيد diff() كائن DateInterval بين تاريخين
  • يتيح DatePeriod التكرار عبر نطاق من التواريخ
  • استخدم ->days للحصول على إجمالي عدد الأيام من diff()
  • تحقق من ->invert لمعرفة ما إذا كانت المدة سالبة

الأسئلة الشائعة

هل درس «حساب التواريخ باستخدام DateInterval» مجاني؟

نعم — نص درس «حساب التواريخ باستخدام DateInterval» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «حساب التواريخ باستخدام DateInterval»؟

أضيفوا الفترات الزمنية واطرحوها باستخدام DateInterval وmodify() تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «حساب التواريخ باستخدام DateInterval»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الطوابع الزمنية لـ Unix وdate()
  2. الفئة DateTime
  3. حساب التواريخ باستخدام DateInterval
  4. المناطق الزمنية في PHP
← العودة إلى PHP Academy