الفئة DateTime
أنشئوا التواريخ وعدّلوها باستخدام واجهة DateTime البرمجية كائنية التوجه
الفئة DateTime درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
DateTime مقابل دوال التاريخ الإجرائية
توفّر PHP دوال إجرائية مثل date() وstrtotime()، بالإضافة إلى واجهة DateTime كائنية التوجه. ويُفضّل النهج الكائني للعمليات المعقدة:
DateTime— كائن تاريخ/وقت قابل للتغييرDateTimeImmutable— غير قابل للتغيير (أكثر أمانًا في الكود الحديث)
إنشاء كائنات DateTime
أنشئ كائنات DateTime من مدخلات متنوعة:
<?php
$now = new DateTime(); // current time
$specific = new DateTime('2024-12-25 14:30:00'); // from string
$fromTs = new DateTime('@' . time()); // from Unix timestamp
echo $now->format('Y-m-d H:i:s');
echo $specific->format('D, d M Y');
// DateTimeImmutable is safer:
$dt = new DateTimeImmutable('2024-01-01');التنسيق باستخدام format()
نسّق كائن DateTime باستخدام محارف التنسيق نفسها المستخدمة في date():
<?php
$dt = new DateTime('2024-05-27 14:30:00');
echo $dt->format('Y-m-d'); // 2024-05-27
echo $dt->format('H:i:s'); // 14:30:00
echo $dt->format('D d M Y, H:i'); // Mon 27 May 2024, 14:30
echo $dt->format('U'); // Unix timestamp
echo $dt->format(DateTime::ATOM); // ISO 8601modify()
عدّل كائن DateTime باستخدام تعبير نسبي:
<?php
$dt = new DateTime('2024-01-15');
$dt->modify('+1 month');
echo $dt->format('Y-m-d'); // 2024-02-15
$dt->modify('next Friday');
echo $dt->format('Y-m-d');
// DateTimeImmutable creates new object:
$dt2 = new DateTimeImmutable('2024-01-15');
$dt3 = $dt2->modify('+1 year'); // $dt2 unchangedcreateFromFormat()
حلّل سلسلة تاريخ باستخدام تنسيق محدد:
<?php
// Parse European date format
$dt = DateTime::createFromFormat('d/m/Y', '25/12/2024');
echo $dt->format('Y-m-d'); // 2024-12-25
// Parse with time
$dt2 = DateTime::createFromFormat('d.m.Y H:i', '27.05.2024 14:30');
echo $dt2->format('c'); // ISO 8601
// Returns false on failure:
$bad = DateTime::createFromFormat('Y-m-d', 'not-a-date');
var_dump($bad); // bool(false)مقارنة كائنات DateTime
قارن كائنات DateTime باستخدام عوامل المقارنة:
<?php
$a = new DateTime('2024-01-01');
$b = new DateTime('2024-12-31');
var_dump($a < $b); // true
var_dump($a == $b); // false
var_dump($a > $b); // false
// Sort an array of DateTime:
$dates = [new DateTime('2024-06-01'), new DateTime('2024-01-01')];
usort($dates, fn($a, $b) => $a <=> $b);
echo $dates[0]->format('Y-m-d'); // 2024-01-01getTimestamp()
حوّل كائن DateTime إلى طابع زمني لـ Unix:
<?php
$dt = new DateTime('2024-12-25');
$ts = $dt->getTimestamp();
echo $ts; // Unix timestamp for Dec 25 2024
// setTimestamp()
$dt2 = new DateTime();
$dt2->setTimestamp($ts);
echo $dt2->format('Y-m-d'); // 2024-12-25تعيين أجزاء التاريخ والوقت
عدّل المكوّنات الفردية لكائن DateTime:
<?php
$dt = new DateTime();
$dt->setDate(2024, 12, 25);
$dt->setTime(23, 59, 59);
echo $dt->format('Y-m-d H:i:s');
// 2024-12-25 23:59:59
// Or chain with DateTimeImmutable:
$dt = (new DateTimeImmutable())
->setDate(2024, 12, 25)
->setTime(0, 0, 0);DateTime عمليًا: التحقق من الاشتراك
استخدام عملي: تحقّق مما إذا كان الاشتراك لا يزال نشطًا:
<?php
function isSubscriptionActive(string $expiresAt): bool {
$expiry = new DateTimeImmutable($expiresAt);
$now = new DateTimeImmutable();
return $expiry > $now;
}
var_dump(isSubscriptionActive('2025-12-31')); // true
var_dump(isSubscriptionActive('2020-01-01')); // falseمكتبة Carbon
Carbon هي مكتبة PHP شائعة توسّع DateTime بواجهة استخدام سلسة:
<?php
// After: composer require nesbot/carbon
use Carbon\Carbon;
$now = Carbon::now();
$then = Carbon::parse('2024-01-01');
echo $now->diffForHumans($then); // '5 months after'
echo $now->addWeek()->format('Y-m-d');
echo Carbon::tomorrow()->isWeekday() ? 'weekday' : 'weekend';
// Locale-aware:
Carbon::setLocale('tr');
echo $now->diffForHumans($then); // TurkishISO 8601 و DateTime::ATOM
استخدم تنسيق ISO 8601 لواجهات API وقواعد البيانات:
<?php
$dt = new DateTime();
// ISO 8601
echo $dt->format('c'); // 2024-05-27T14:30:00+03:00
echo $dt->format(DateTime::ATOM); // same
echo $dt->format(DateTime::RFC3339); // same family
// For JSON APIs:
$json = json_encode([
'created_at' => $dt->format(DateTime::ATOM)
]);
echo $json;تحقق سريع
ما الفرق الأساسي بين DateTime و DateTimeImmutable؟
مراجعة: فئة DateTime
أساسيات DateTime كائنية التوجه:
new DateTime('date string')للإنشاءformat()للإخراجmodify()للتغييرات النسبيةcreateFromFormat()لتحليل التنسيقات المخصصة- فضّل
DateTimeImmutableلتجنّب أخطاء التغيير - استخدم ISO 8601 (
DateTime::ATOM) لواجهات API
الأسئلة الشائعة
هل درس «الفئة DateTime» مجاني؟
نعم — نص درس «الفئة DateTime» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «الفئة DateTime»؟
أنشئوا التواريخ وعدّلوها باستخدام واجهة DateTime البرمجية كائنية التوجه تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الفئة DateTime»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الطوابع الزمنية لـ Unix وdate()
- الفئة DateTime
- حساب التواريخ باستخدام DateInterval
- المناطق الزمنية في PHP