العمل مع التواريخ في PHP: نظرة عامة على المكتبات والأدوات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع التواريخ في PHP: أفضل المكتبات والأدوات

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



الفئات المضمنة في PHP: DateTime و DateTimeImmutable

ابتداءً من الإصدار 5.2، تتضمن PHP فئات موجهة للكائنات للعمل مع التواريخ. أهمها:

  • DateTime — كائن تاريخ/وقت قابل للتعديل
  • DateTimeImmutable — نظير غير قابل للتعديل (أكثر أمانًا عند التمرير بالمرجع)
  • DateInterval — تمثيل الفاصل الزمني
  • DatePeriod — التكرار عبر التواريخ بفاصل زمني محدد


مثال على إنشاء وتنسيق التاريخ:

<?php$date = new DateTime('2024-12-25 10:30:00');echo $date->format('Y-m-d H:i:s'); // 2024-12-25 10:30:00

// إضافة أسبوع واحد$date->modify('+1 week');echo $date->format('Y-m-d'); // 2025-01-01?>


Carbon — المعيار الفعلي لـ Laravel

Carbon هو امتداد لفئة DateTime يضيف عشرات الطرق الملائمة. تُستخدم المكتبة بنشاط في Laravel و Symfony. التثبيت عبر Composer:

composer require nesbot/carbon


الإمكانيات الرئيسية لـ Carbon:

  • معدِّلات مفهومة للبشر: ->addDay()، ->subMonth()، ->startOfWeek()
  • التدويل: Carbon::setLocale('ar')
  • التواريخ النسبية: ->diffForHumans() (ستُرجع "منذ 3 ساعات"، "بعد يومين")
  • تحليل اللغة الطبيعية: Carbon::parse('next monday')


مثال على استخدام Carbon:

<?phpuse Carbon\\Carbon;

$now = Carbon::now('Europe/Moscow');echo $now->toDateString(); // 2025-03-15

$birthday = Carbon::create(1990, 5, 20);echo $birthday->age; // 34

// الفرق بين التواريخ$start = Carbon::parse('2024-01-01');$end = Carbon::parse('2024-12-31');echo $start->diffInDays($end); // 365

// تاريخ نسبيecho Carbon::parse('-1 week')->diffForHumans(); // "منذ أسبوع واحد"?>


Chronos — بديل من CakePHP

Chronos هي مكتبة مستقلة أنشأها مطورو CakePHP. الفرق الرئيسي فيها هو عدم القابلية للتعديل افتراضيًا (مثل DateTimeImmutable). الميزات:

  • جميع الكائنات غير قابلة للتعديل — أكثر أمانًا للبيئات متعددة الخيوط
  • دعم المناطق الزمنية مع مراعاة التوقيت الصيفي
  • طرق تقريب ملائمة: ->startOfDay()، ->endOfMonth()
  • خفيف الوزن (بدون تبعيات)


مثال على العمل مع Chronos:

<?phpuse Cake\\Chronos\\Chronos;

$date = Chronos::now();echo $date->addDays(10)->format('d.m.Y'); // 25.03.2025

// الفرق مع تحديد الدقة$future = Chronos::create(2025, 12, 31);echo $date->diffInDays($future); // 291

// التحقق من التاريخecho $date->isWeekend() ? 'عطلة نهاية الأسبوع' : 'يوم عمل';?>


CakePHP Time — للعمل مع المناطق الزمنية

أداة أخرى من CakePHP — Cake\\I18n\\Time. توسع Chronos وتضيف دعم التدويل. مفيدة عندما تحتاج إلى عرض التواريخ بلغات مختلفة:

<?phpuse Cake\\I18n\\Time;

Time::setDefaultLocale('ar_SA');$time = Time::parse('2025-03-15 14:30:00', 'Europe/Moscow');echo $time->i18nFormat('dd MMMM yyyy'); // 15 مارس 2025?>


مقارنة المكتبات

لاختيار المكتبة المناسبة، انتبه إلى المعايير التالية:

  • Carbon — أفضل خيار لمشاريع Laravel

توصيات