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

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

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

ابدأ الدورة

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



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



1. الفئة المدمجة DateTime

قبل الانتقال إلى المكتبات الخارجية، يجدر بنا التذكير بالحل الأصلي — الفئة DateTime. وهي متاحة في PHP منذ الإصدار 5.2 وتوفر وظائف أساسية:

  • إنشاء كائنات التاريخ والوقت
  • التنسيق (عبر format())
  • تعديل التاريخ (عبر modify())
  • العمل مع المناطق الزمنية (DateTimeZone)
  • مقارنة التواريخ

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

<?php$date = new DateTime('2024-12-31');$date->modify('+1 day');echo $date->format('Y-m-d'); // 2025-01-01?>

ومع ذلك، فإن DateTime له عيوب: عدم وجود طرق ملائمة للعمل مع الفترات الزمنية، صعوبات في سلاسل الاستدعاءات، ودعم محدود للتنسيقات القابلة للقراءة البشرية.



2. Carbon — المكتبة الأكثر شيوعًا

Carbon هو امتداد لـ DateTime يضيف واجهة برمجة تطبيقات مريحة، وسلاسل استدعاءات، والعديد من الوظائف المساعدة. التثبيت عبر Composer:

composer require nesbot/carbon

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

  • طرق قابلة للقراءة البشرية: now()، yesterday()، tomorrow()
  • التدويل (دعم اللغة العربية)
  • العمل مع الفترات الزمنية: diffForHumans()
  • تعديل التاريخ عبر سلاسل الاستدعاءات: ->addDays(5)->subMonths(2)
  • المقارنة: isWeekend()، isPast()، isFuture()

مثال مع التدويل العربي:

<?phprequire 'vendor/autoload.php';use Carbon\\Carbon;

Carbon::setLocale('ar');$date = Carbon::now();echo $date->diffForHumans(); // "الآن" أو "منذ 3 ساعات"?>

Carbon هو المعيار الفعلي للعمل مع التواريخ في Laravel والعديد من المشاريع الأخرى.



3. Chronos — بديل خفيف

Chronos من CakePHP هو امتداد آخر لـ DateTime، ولكنه يركز على الخفة والأداء. التثبيت:

composer require cakephp/chronos

الاختلافات عن Carbon:

  • لا تبعيات (باستثناء PHP)
  • كتابة أكثر صرامة (strict typing)
  • دعم الكائنات غير القابلة للتغيير (immutable) افتراضيًا
  • طرق أقل، ولكن الأساسية موجودة

مثال:

<?phpuse Cake\\Chronos\\Chronos;

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

Chronos مناسب للمشاريع التي تهم فيها نظافة الكود والأداء، ولكن لا حاجة لنظام بيئي واسع.



4. CarbonImmutable وDateTimeImmutable

بدءًا من PHP 5.5، ظهرت الفئة DateTimeImmutable التي لا تعدل الكائن الأصلي، بل تعيد كائنًا جديدًا. في Carbon، يوجد نظير — CarbonImmutable. هذا يمنع التغييرات العرضية للبيانات:

<?phpuse Carbon\\CarbonImmutable;

$date = CarbonImmutable::now();$newDate = $date->addDay();echo $date->format('Y-m-d'); // الأصل لم يتغير?>

استخدم الإصدارات غير القابلة للتغيير (immutable) إذا كانت التواريخ تُمرر بين الدوال أو تُخزن في ذاكرة التخزين المؤقت.



5. League\\Period — العمل مع الفترات الزمنية

مكتبة Period من The League of Extraordinary Packages مخصصة للعمل مع الفترات الزمنية والفترات

توصيات