العمل مع التواريخ والوقت في PHP: من الأساسيات إلى التقنيات المتقدمة
العمل مع التواريخ والوقت هو من أكثر المهام شيوعًا في تطوير الويب. سواء كان عرض التاريخ الحالي، حساب الفرق بين الأحداث، أو حفظ الطوابع الزمنية في قاعدة البيانات — يوفر PHP أدوات قوية ومرنة. في هذه المقالة، سنشرح بالتفصيل الوظائف الأساسية والفئات وأفضل الممارسات للعمل مع التواريخ والوقت في PHP.
ستكون المادة مفيدة لكل من المبتدئين الذين بدأوا للتو في تعلم PHP، والمطورين ذوي الخبرة الذين يرغبون في تنظيم معرفتهم.
1. الوظائف الأساسية: date() و time() و mktime()
لنبدأ بالأساسيات. يقدم PHP العديد من الوظائف المدمجة للعمل مع التواريخ. أشهرها هي date() و time() و mktime().
الدالة time()
الدالة time() ترجع الطابع الزمني الحالي لـ Unix (timestamp) — عدد الثواني المنقضية منذ 1 يناير 1970 00:00:00 UTC. هذه هي القيمة الأساسية التي تنطلق منها العديد من العمليات.
echo time(); // سيطبع شيئًا مثل 1698765432الدالة date()
الدالة date() تقوم بتنسيق التاريخ والوقت المحلي. المعامل الأول هو سلسلة التنسيق، والمعامل الثاني (اختياري) هو timestamp. إذا لم يتم تحديد المعامل الثاني، يتم استخدام الوقت الحالي.
// التنسيقات الأساسيةecho date("Y-m-d"); // 2023-10-31echo date("H:i:s"); // 14:30:00echo date("d.m.Y H:i"); // 31.10.2023 14:30echo date("l, j F Y"); // Tuesday, 31 October 2023
// timestamp مخصص$timestamp = mktime(12, 0, 0, 1, 1, 2024);echo date("Y-m-d H:i:s", $timestamp); // 2024-01-01 12:00:00رموز التنسيق الشائعة:
d— يوم الشهر (01-31)m— الشهر (01-12)Y— السنة بتنسيق مكون من 4 أرقامH— الساعات (00-23)i— الدقائق (00-59)s— الثواني (00-59)
الدالة mktime()
mktime() تنشئ timestamp بناءً على المعاملات المرسلة (الساعات، الدقائق، الثواني، الشهر، اليوم، السنة). هذا مفيد للحصول على طابع زمني لتاريخ محدد.
// إنشاء timestamp ليوم 25 ديسمبر 2023، الساعة 10:30:00$christmas = mktime(10, 30, 0, 12, 25, 2023);echo date("d.m.Y H:i:s", $christmas); // 25.12.2023 10:30:002. النهج الكائني: فئة DateTime
على الرغم من أن الدوال date() و time() بسيطة، إلا أن لها قيودًا. للعمليات الأكثر تعقيدًا (مقارنة التواريخ، العمل مع المناطق الزمنية، جمع/طرح الفترات) من الأفضل استخدام فئة DateTime.
إنشاء كائنات DateTime
// الوقت الحالي$now = new DateTime();echo $now->format("Y-m-d H:i:s"); // 2023-10-31 14:30:00
// تاريخ محدد$date = new DateTime("2024-03-15 08:00:00");echo $date->format("d.m.Y"); // 15.03.2024
// تنسيقات نسبية$nextWeek = new DateTime("+1 week");echo $nextWeek->format("Y-m-d");
$lastMonth = new DateTime("first day of last month");echo $lastMonth->format("Y-m-d");العمل مع المناطق الزمنية
واحدة من المزايا الرئيسية لـ DateTime هي دعم المناطق الزمنية.
// تحديد المنطقة الزمنية عند الإنشاء$moscow = new DateTime("now", new DateTimeZone("Europe/Moscow"));echo $moscow->format("Y-m-d H:i:s"); // توقيت موسكو
// تغيير المنطقة الزمنية$newYork = new DateTime("now", new DateTimeZone("America/New_York"));echo $newYork->format("Y-m-d H:i:s"); // توقيت نيويورك
// قائمة المناطق المتاحة: https://www.php.net/manual/ru/timezones.phpمقارنة التواريخ
$date1 = new DateTime("2024-01-01");$date2 = new DateTime("2024-12-31");
if ($date1 < $date2) { echo "التاريخ الأول أقدم من الثاني";}
// الفرق