كيفية الحصول على التاريخ والوقت الحالي في PHP: أفضل الممارسات لعام 2025
\n\nكل مطور PHP، من المبتدئ إلى الخبير، تساءل مرة على الأقل: "كيف أحصل على التاريخ والوقت الحالي في PHP؟". هذا السؤال حصد آلاف المشاهدات على Stack Overflow ولا يزال ذا أهمية. في عام 2025، بينما يواصل PHP الحفاظ على مكانته بقوة في تطوير الويب، فإن إتقان التعامل مع التواريخ والأوقات ليس مجرد مهارة أساسية، بل ضرورة حتمية. تسجيل الأحداث، التخزين المؤقت، التقارير، العمل مع API — كل هذا يتطلب وقتًا دقيقًا. في هذا المقال، سنستعرض ليس فقط الدوال التقليدية، بل أيضًا أفضل الممارسات الحديثة لضمان أن يكون كودك نظيفًا وموثوقًا وجاهزًا لأي منطقة زمنية.
\n\nالطريقة التقليدية: date() و time()
\n\nأبسط وأسرع طريقة للحصول على التاريخ والوقت الحالي في PHP هي دالة date(). تأخذ هذه الدالة سلسلة تنسيق وتعيد التاريخ المنسق بناءً على وقت الخادم الحالي أو timestamp محدد.
<?php\necho date('Y-m-d H:i:s'); // 2025-04-10 14:30:00\necho date('d.m.Y'); // 10.04.2025\necho date('r'); // Thu, 10 Apr 2025 14:30:00 +0300\n?>\n\nوإذا كنت تحتاج فقط إلى Unix timestamp (عدد الثواني منذ 1 يناير 1970)؟ استخدم time():
<?php\n$timestamp = time();\necho $timestamp; // 1744273800 (مثال)\necho date('Y-m-d H:i:s', $timestamp);\n?>\n\nملاحظة مهمة: تستخدم date() المنطقة الزمنية المحددة في ملف php.ini عبر التوجيه date.timezone، أو تلك المعينة بواسطة الدالة date_default_timezone_set(). في عام 2025، لا يزال هذا خيارًا عمليًا للنصوص البسيطة، لكن للمشاريع الجادة توجد أدوات أكثر مرونة.
النهج الحديث: كلاس DateTime
\n\nمنذ PHP 5.2 (وهذا كان منذ زمن)، ظهرت في اللغة طريقة كائنية التوجه للتعامل مع التواريخ — كلاس DateTime. أصبح هذا الكلاس المعيار الفعلي لمعظم أطر العمل وأنظمة إدارة المحتوى. لماذا؟ لأنه أكثر مرونة، وأسهل للقراءة، وأكثر أمانًا.
<?php\n$now = new DateTime();\necho $now->format('Y-m-d H:i:s'); // 2025-04-10 14:30:00\n\n// مع تحديد المنطقة الزمنية\n$now = new DateTime('now', new DateTimeZone('Asia/Riyadh'));\necho $now->format('Y-m-d H:i:s'); // 2025-04-10 14:30:00 (توقيت الرياض)\n?>\n\nيتيح لك DateTime التعامل بسهولة مع التواريخ: إضافة أيام، طرح أشهر، مقارنة الكائنات. على سبيل المثال:
<?php\n$today = new DateTime();\n$nextWeek = (new DateTime())->modify('+7 days');\n$diff = $nextWeek->diff($today);\necho $diff->days; // 7\n?>\n\nهذا هو النهج الموصى به في أفضل ممارسات PHP لعام 2025. إنه غير قابل للتغيير (إذا لم تعدل الكائن مباشرة) وبديهي وسهل الفهم.
\n\nالخيار غير القابل للتغيير: DateTimeImmutable
\n\nإذا كنت تعمل في مشروع جاد حيث تكون القدرة على التوقع مهمة، استخدم DateTimeImmutable. على عكس DateTime، فإن دوال هذا الكلاس لا تغير الكائن الأصلي، بل تعيد كائنًا جديدًا. هذا يمنع التغييرات العرضية في الحالة.
<?php\n$date = new DateTimeImmutable('2025-04-10');\n$newDate = $date->modify('+1 month');\necho $date->format('Y-m-d'); // 2025-04-10 (لم يتغير)\necho $newDate->format('Y-m-d'); // 2025-05-10\n?>\n\nفي عام 2025، يعتبر هذا أسلوبًا جيدًا — استخدم DateTimeImmutable حيثما أمكن.
المناطق الزمنية: الإعداد والتحويل
\n\nالخطأ في المنطقة الزمنية هو أحد أكثر المشاكل شيوعًا. تخيل: الخادم في أمريكا، والمستخدم في السعودية، وأنت تعرض الوقت بتوقيت غرينتش. هذا فشل كلاسيكي.
\n\nلتجنب ذلك، حدد دائمًا المنطقة الزمنية بوضوح. الطريقة الأكثر موثوقية هي تعيينها في بداية السكربت باستخدام date_default_timezone_set():