في لغة PHP، التعامل مع التاريخ والوقت يتم باستخدام مجموعة من الدوال والأصناف المدمجة. إليك شرح شامل لأهم المفاهيم والأدوات:

1. الدوال الأساسية:

  • time(): تُرجع هذه الدالة "الطابع الزمني ليونكس" (Unix timestamp)، وهو عدد الثواني التي انقضت منذ 1 يناير 1970 الساعة 00:00:00 بالتوقيت العالمي المنسق (UTC). يُستخدم هذا الرقم غالبًا لتخزين التواريخ والأوقات في قواعد البيانات.

    PHP
    $timestamp = time();
    echo $timestamp; // مثال: 1678886400
  • date(): تُستخدم لتنسيق التاريخ والوقت. تأخذ معاملين: الأول هو سلسلة تنسيق تحدد كيفية عرض التاريخ والوقت، والثاني (اختياري) هو الطابع الزمني ليونكس. إذا لم يتم تحديد الطابع الزمني، فسيتم استخدام الوقت الحالي.

    PHP
    $date = date("Y-m-d H:i:s"); // تنسيق التاريخ والوقت الحالي
    echo $date; // مثال: 2024-12-30 19:24:00

    $date_from_timestamp = date("Y-m-d", 1678886400); // تنسيق تاريخ من طابع زمني
    echo $date_from_timestamp; // مثال: 2023-03-15

    بعض أحرف التنسيق الشائعة في date():

    • Y: السنة بأربعة أرقام (مثال: 2024)
    • m: الشهر برقمين (01 إلى 12)
    • d: اليوم برقمين (01 إلى 31)
    • H: الساعة بنظام 24 ساعة (00 إلى 23)
    • i: الدقائق (00 إلى 59)
    • s: الثواني (00 إلى 59)
    • A: AM أو PM
  • mktime(): تُستخدم لإنشاء طابع زمني ليونكس من تاريخ ووقت محددين.

    PHP
    $timestamp = mktime(0, 0, 0, 1, 1, 2025); // طابع زمني ليوم 1 يناير 2025
    echo $timestamp;

2. صنف DateTime:

يُعتبر صنف DateTime طريقة أكثر قوة ومرونة للتعامل مع التواريخ والأوقات في PHP.

  • إنشاء كائنات DateTime:

    PHP
    $date = new DateTime(); // التاريخ والوقت الحاليين
    $specific_date = new DateTime("2024-12-25 10:30:00"); // تاريخ ووقت محددين
    $date_from_timestamp = new DateTime("@1678886400"); // تاريخ من طابع زمني
  • تنسيق التاريخ والوقت باستخدام format():

    PHP
    echo $date->format("Y-m-d H:i:s");
    
  • تعديل التاريخ والوقت باستخدام modify():

    PHP
    $date->modify("+1 day"); // إضافة يوم واحد
    $date->modify("-1 week"); // طرح أسبوع واحد
    $date->modify("+2 months"); // إضافة شهرين
  • مقارنة التواريخ:

    يمكن مقارنة كائنات DateTime باستخدام عوامل المقارنة (مثل <، >، ==).

    PHP
    $date1 = new DateTime("2024-12-31");
    $date2 = new DateTime("2025-01-01");

    if ($date1 < $date2) {
    echo "date1 is before date2";
    }

3. مناطق الوقت (Time Zones):

من المهم التعامل مع مناطق الوقت بشكل صحيح، خاصةً في التطبيقات التي يتعامل معها مستخدمون من مناطق جغرافية مختلفة.

  • ضبط منطقة الوقت الافتراضية:

    يمكن ضبط منطقة الوقت الافتراضية باستخدام الدالة date_default_timezone_set() أو في ملف php.ini.

    PHP
    date_default_timezone_set("Africa/Tunis");
    
  • التعامل مع مناطق الوقت في DateTime:

    يمكن تحديد منطقة الوقت عند إنشاء كائن DateTime أو تعديلها لاحقًا.

    PHP
    $date = new DateTime("now", new DateTimeZone("America/New_York"));
    $date->setTimezone(new DateTimeZone("Europe/London"));

مثال شامل:

PHP
date_default_timezone_set("Africa/Tunis");

$now = new DateTime();
echo "الوقت الحالي في تونس: " . $now->format("Y-m-d H:i:s") . "\n";

$birthday = new DateTime("1990-05-15");
echo "تاريخ ميلادي: " . $birthday->format("d/m/Y") . "\n";

$future_date = new DateTime("+1 week");
echo "بعد أسبوع من الآن: " . $future_date->format("Y-m-d") . "\n";

$date_in_ny = new DateTime("now", new DateTimeZone("America/New_York"));
echo "الوقت الحالي في نيويورك: " . $date_in_ny->format("Y-m-d H:i:s") . "\n";

هذا الشرح يغطي الجوانب الأساسية للتعامل مع التاريخ والوقت في PHP. استخدام صنف DateTime يُفضل عمومًا على الدوال القديمة مثل date() و mktime() لقوته ومرونته.