العمل مع التواريخ والوقت في PHP: من الألف إلى الياء
\n\nالعمل مع التواريخ والوقت من أكثر المهام شيوعًا في تطوير الويب. سواء كان عرض تاريخ النشر، حساب عمر المستخدم، تسجيل الأحداث أو إنشاء تقويم - توفر PHP أدوات قوية ومرنة. في هذه المقالة سنغطي جميع الجوانب: من الدوال البسيطة إلى النهج الكائني مع فئة DateTime، بما في ذلك المناطق الزمنية والأمثلة العملية.
الدوال الأساسية: date() و time()
\n\nمجموعة الدوال الأساسية للعمل مع التواريخ تشمل time() و date(). ترجع الدالة time() الطابع الزمني الحالي لنظام Unix (عدد الثواني منذ 1 يناير 1970). تقوم الدالة date() بتنسيق هذا الطابع إلى شكل قابل للقراءة البشرية.
الحصول على التاريخ والوقت الحاليين
\nأبسط طريقة لعرض التاريخ الحالي:
\n<?php\necho date('Y-m-d H:i:s'); // 2025-04-10 15:30:45\n?>\n\nالتنسيق باستخدام date()
\nتأخذ الدالة date() معلمتين: التنسيق وطابع زمني اختياري. أشهر رموز التنسيق:
- \n
d— يوم الشهر (01–31) \n m— الشهر (01–12) \n Y— السنة بتنسيق 4 أرقام \n H— الساعات بتنسيق 24 ساعة (00–23) \n i— الدقائق (00–59) \n s— الثواني (00–59) \n
مثال للإخراج مع نص عربي:
\n<?php\necho 'اليوم ' . date('d.m.Y') . '، الوقت ' . date('H:i');\n// اليوم 10.04.2025، الوقت 15:30\n?>\n\nفئة DateTime: النهج الكائني
\nللعمليات المعقدة يُوصى باستخدام فئة DateTime. فهي بديهية، تدعم المناطق الزمنية وتُبسط التعامل مع التواريخ.
إنشاء كائن DateTime
\nيمكن إنشاء الكائن بعدة طرق:
\n<?php\n// التاريخ والوقت الحاليين\n$now = new DateTime();\necho $now->format('Y-m-d H:i:s'); // 2025-04-10 15:30:45\n\n// تاريخ محدد\n$date = new DateTime('2025-12-31 23:59:59');\necho $date->format('d.m.Y'); // 31.12.2025\n\n// باستخدام تنسيق نسبي\n$nextWeek = new DateTime('+1 week');\necho $nextWeek->format('Y-m-d');\n?>\n\nتعديل التاريخ: modify()
\nتسمح الطريقة modify() بإضافة أو طرح الفترات بسهولة:
<?php\n$date = new DateTime('2025-04-10');\n$date->modify('+10 days');\necho $date->format('d.m.Y'); // 20.04.2025\n\n$date->modify('-1 month');\necho $date->format('d.m.Y'); // 20.03.2025\n?>\n\nالعمل مع المناطق الزمنية
\nتجاهل المناطق الزمنية خطأ شائع. تقدم PHP طريقتين للتحكم بها: عالميًا عبر date_default_timezone_set() ومحليًا عبر كائن DateTimeZone.
الإعداد العالمي
\nقم بتعيين المنطقة الزمنية في بداية السكريبت:
\n<?php\ndate_default_timezone_set('Europe/Moscow');\necho date('H:i'); // الوقت بتوقيت موسكو\n?>\n\nالإعداد المحلي لـ DateTime
\nيمكن أن يكون لكل كائن DateTime منطقته الزمنية الخاصة:
<?php\n$timezone = new DateTimeZone('Asia/Vladivostok');\n$date = new DateTime('now', $timezone);\necho $date->format('H:i'); // الوقت في فلاديفوستوك\n\n// تغيير المنطقة لكائن موجود\n$date->setTimezone(new DateTimeZone('Europe/Moscow'));\necho $date->format('H:i'); // الوقت المحول\n?>\n\nالفرق بين التواريخ: DateInterval
\nتسمح فئة DateInterval والطريقة diff() بحساب الفرق بين تاريخين.
حساب الفرق
\n<?php\n$start = new DateTime('2025-01-01');\n$end = new DateTime('2025-12-31');\n$interval = $start->diff($end);\n\necho $interval->days; // 364 (العدد