مقدمة: لماذا سؤال "السنة الحالية" شائع جدًا؟
\n\nقد يبدو الأمر بسيطًا: أن تسأل PHP "ما هي السنة الحالية؟" وتحصل على الإجابة. لكن المفاجأة أن سؤال "How do I use PHP to get the current year?" حصد عشرات الآلاف من المشاهدات على Stack Overflow. لماذا؟
\n\nأولاً، هي من أولى المهام التي يواجهها المبتدئ: عرض "© 2024" في تذييل الموقع، إنشاء قائمة سنوات ديناميكية في نموذج التسجيل، أو التحقق من عمر المستخدم. ثانيًا، تقدم PHP عدة طرق مختلفة، ولكل منها تفاصيلها الدقيقة. ثالثًا (وهذا هو الأكثر خطورة)، كثيرًا ما يخلط المبتدئون بين date('y') و date('Y') — فيحصلون على 24 بدلاً من 2024. ثم يتساءلون لماذا موقعهم "عالق في القرن الماضي".
في هذا المقال، سنستعرض جميع الطرق الشائعة للحصول على السنة الحالية في PHP، من الأبسط إلى الأكثر تقدمًا. ستتعلم كيفية تجنب الأخطاء النموذجية، وأي طريقة تختار لمشروعك، وكيفية التعامل مع السنة في مناطق زمنية مختلفة. هيا بنا!
\n\n1. الطريقة الأسهل: دالة date()
\n\nملك دوال PHP للتعامل مع التواريخ هو date(). تأخذ هذه الدالة تنسيقًا واختياريًا طابعًا زمنيًا. إذا لم تحدد الطابع، يتم استخدام الوقت الحالي للخادم.
كيفية الحصول على السنة بأربعة أرقام (2024, 2025…)
\n<?php\necho date('Y'); // سيطبع: 2024\n?>\n\nالرمز Y (حرف كبير) هو تمثيل كامل للسنة، 4 أرقام. يجب استخدامه في 99% من الحالات.
\n\nكيفية الحصول على السنة برقمين (24, 25…)
\n<?php\necho date('y'); // سيطبع: 24\n?>\n\nالرمز y (حرف صغير) هو السنة برقمين. استخدمه فقط إذا كنت تكتب برنامجًا تجريبيًا أو تعمل مع كود قديم (والذي غالبًا ما يكون معطلاً بسبب مشاكل مشابهة لـ Y2K).
\n\nمثال عملي: حقوق النشر في التذييل
\n<footer>\n <p>© 2010–<?php echo date('Y'); ?> موقعي الرائع</p>\n</footer>\n\nهذا الكود سيُحدّث السنة في التذييل تلقائيًا — لن تضطر لتعديله كل عام. رائع، أليس كذلك؟
\n\n2. الطريقة الكائنية: كلاس DateTime
\n\nإذا كنت تكتب كود PHP حديث (7.x, 8.x)، فمن الأفضل استخدام كلاس DateTime. إنه أكثر مرونة، وسهل الاستخدام، وأسهل في القراءة.
الحصول على السنة عبر DateTime
\n<?php\n$now = new DateTime();\necho $now->format('Y'); // 2024\n?>\n\nتعمل دالة format() بنفس طريقة date()، لكن على كائن. الميزة هي أنه يمكنك بسهولة تغيير التاريخ، إضافة أيام أو أشهر، ثم تنسيقه مرة أخرى.
مثال متقدم: السنة من تاريخ محدد
\n<?php\n$date = new DateTime('2023-03-15');\necho $date->format('Y'); // 2023\n?>\n\nهذا مفيد عند العمل مع قاعدة بيانات وتخزين التواريخ كنصوص.
\n\n3. الطريقة التقليدية strftime() (مع تحذير)
\n\nدالة strftime() هي طريقة أخرى للحصول على السنة. ميزتها أنها تراعي الإعدادات المحلية (اللغة والمنطقة). على سبيل المثال، في الإعدادات العربية، يمكنها عرض اسم الشهر بالعربية.
مثال مع strftime
\n<?php\nsetlocale(LC_TIME, 'ar_AE.utf8');\necho strftime('%Y'); // 2024\n?>\n\nلكن هناك نقطة مهمة: بدءًا من PHP 8.1، تم وضع علامة مهملة (deprecated) على دالة strftime(). لا يزال يمكن استخدامها، لكن قد تُحذف في الإصدارات المستقبلية. إذا كنت تكتب كودًا جديدًا، فاستخدم DateTime.
4. المتغير $_SERVER['REQUEST_TIME']
\n\nأحيانًا تحتاج للحصول على السنة "بسرعة" دون إنشاء كائنات. لهذا، يمكنك استخدام المصفوفة الشاملة $_SERVER.
<?php\necho date('Y', $_SERVER['REQUEST_TIME']); // 2024\n?>\n\nيحتوي $_SERVER['REQUEST_TIME'] على الطابع الزمني لبدء الطلب الحالي. إنه سريع ولا يتطلب إنشاء كائنات جديدة.
5. دالة time() مع date()
\n\nيمكنك أيضًا استخدام دالة time() التي تعيد الطابع الزمني الحالي، ثم تمريره إلى date().
<?php\necho date('Y', time()); // 2024\n?>\n\nهذه الطريقة مشابهة لاستخدام date('Y') مباشرة، لكنها تعطيك تحكمًا أكبر إذا كنت بحاجة لتعديل الطابع الزمني قبل التنسيق.
أخطاء شائعة يجب تجنبها
\n\n- \n
- الخلط بين Y و y: استخدم Y دائمًا للحصول على 4 أرقام، إلا إذا كنت تحتاج حقًا إلى رقمين. \n
- إهمال المنطقة الزمنية: تأكد من ضبط المنطقة الزمنية باستخدام
date_default_timezone_set(). \n - استخدام strftime() في كود جديد: تجنبها لأنها مهملة. \n
الخلاصة: أي طريقة تختار؟
\n\nإذا كنت مبتدئًا، استخدم date('Y') — إنها الأسهل. إذا كنت تكتب كودًا احترافيًا، استخدم DateTime — إنها الأكثر مرونة. تجنب strftime() في المشاريع الجديدة. والآن، جرب بنفسك!