دوال الحساب والتاريخ
حساب الخصومات، وإعداد التقارير، وعرض عبارة «نُشر منذ 3 أيام»، وإنشاء أرقام الطلبات — تعد العمليات الحسابية وعمليات التعامل مع التواريخ أمراً أساسياً في كل تطبيق ويب.
1. الدوال الحسابية الشائعة
PHP
<?php
// Basic operations
echo abs(-5); // 5 (absolute value)
echo ceil(3.14); // 4 (round up)
echo floor(3.99); // 3 (round down)
echo round(3.5); // 4 (rounds .5 to nearest even)
echo round(3.14159, 2); // 3.14 (2 decimal places)
// Min and max
echo max(3, 7, 2, 9); // 9 (maximum)
echo min(3, 7, 2, 9); // 2 (minimum)
echo max([5, 3, 9, 1]); // 9 (arrays work too)
// Powers and roots
echo pow(2, 3); // 8 (2 to the power of 3)
echo sqrt(16); // 4 (square root)
// Random numbers
echo rand(1, 100); // Random integer between 1 and 100
echo mt_rand(1, 1000); // High-quality random (recommended)
echo random_int(1, 10); // Cryptographically secure random (PHP 7+)
?>
💡 نصيحة: للحصول على أرقام عشوائية للاستخدام اليومي، استخدم
mt_rand() — فهو أسرع بحوالي 4 أضعاف ويُنتج أرقامًا عشوائية أفضل من rand(). أما بالنسبة للقيم الحساسة من الناحية الأمنية مثل كلمات المرور والرموز المميزة، فاستخدم random_int() بدلاً من ذلك، فهو آمن من الناحية التشفيرية.
2. الدالة date()
date() هي الأداة الأساسية في لغة PHP لتنسيق التواريخ والأوقات باستخدام سلسلة تنسيق:
PHP
<?php
// Current date and time
echo date("Y-m-d"); // 2026-06-29
echo date("l, F j, Y"); // Monday, June 29, 2026
echo date("H:i:s"); // 14:30:45
echo date("Y-m-d H:i:s"); // 2026-06-29 14:30:45
// Day of week
echo date("l"); // Monday (full weekday name)
echo date("w"); // 1 (numeric day, 0 = Sunday)
?>
(1) أحرف التنسيق الموحد
| الحرف | المعنى | مثال |
|---|---|---|
Y |
السنة بأربعة أرقام | 2026 |
y |
السنة مكونة من رقمين | 26 |
m |
الشهر (مع إضافة أصفار من اليسار) | 06 |
n |
الشهر (بدون حشو) | 6 |
d |
اليوم (مع إضافة أصفار من اليسار) | 09 |
j |
اليوم (بدون حشو) | 9 |
H |
24 ساعة (مع إضافة أصفار) | 14 |
i |
الدقائق (مع ملء الفراغات بصفر) | 30 |
s |
ثوانٍ (مع ملء الفراغات بصفر) | 45 |
▶ مثال: تحويلات الطوابع الزمنية
PHP
<?php
// time(): current Unix timestamp (seconds since January 1, 1970)
$now = time();
echo $now; // e.g. 1751101234
// date() accepts a timestamp as its second argument
echo date("Y-m-d H:i:s", $now);
// strtotime(): human-readable dates → timestamps
$ts = strtotime("2026-01-01 00:00:00");
echo date("F j, Y", $ts); // January 1, 2026
// strtotime is surprisingly smart
echo date("Y-m-d", strtotime("+1 week")); // One week from now
echo date("Y-m-d", strtotime("next Monday")); // Next Monday
echo date("Y-m-d", strtotime("last day of this month")); // Last day of this month
echo date("Y-m-d", strtotime("+3 months")); // Three months from now
?>
💡 نصيحة: يفهم
strtotime() العبارات المكتوبة باللغة الطبيعية مثل +1 week وnext Monday وfirst day of next month. ومع ذلك، لا تعتمد عليه في العمليات الحسابية المعقدة المتعلقة بالتواريخ — استخدم فئة DateTime بدلاً من ذلك.
3. فئة DateTime
تغطي date() وstrtotime() الحالات البسيطة. أما بالنسبة للحالات الأكثر تعقيدًا، فيمكنك اللجوء إلى فئة DateTime — فهي موجهة للكائنات وأكثر قوة بكثير:
PHP
<?php
// Creating DateTime objects
$now = new DateTime();
$specific = new DateTime("2026-06-01 09:00:00");
$fromFormat = DateTime::createFromFormat("d/m/Y", "15/08/2026");
// Formatting output
echo $now->format("Y-m-d H:i:s");
// Adding and subtracting dates
$future = new DateTime();
$future->modify("+2 weeks");
$future->modify("+3 days");
echo $future->format("Y-m-d"); // Today + 17 days
// Calculating differences
$birthday = new DateTime("2000-01-15");
$today = new DateTime();
$diff = $birthday->diff($today);
echo "You have been alive for {$diff->days} days, {$diff->y} years";
// diff() returns a DateInterval object with y/m/d/h/i/s/days properties
?>
▶ مثال: مقارنة التواريخ والنطاقات
PHP
<?php
$start = new DateTime("2026-06-01");
$end = new DateTime("2026-06-30");
// Comparing dates
if ($start < $end) {
echo "Start date is before end date";
}
// Iterating over a date range
$period = new DateInterval("P7D"); // 7-day interval
$dates = new DatePeriod($start, $period, $end);
foreach ($dates as $date) {
echo $date->format("m-d") . " ";
}
// Output: 06-01 06-08 06-15 06-22 06-29
?>
4. تهيئة المنطقة الزمنية
PHP
<?php
// Set the timezone (do this once at the top of your script)
date_default_timezone_set("Asia/Shanghai");
echo date("Y-m-d H:i:s"); // Now shows Shanghai time
// Check the current timezone
echo date_default_timezone_get(); // Asia/Shanghai
// Common timezones:
// Asia/Shanghai - China Standard Time (UTC+8)
// Asia/Tokyo - Japan Standard Time (UTC+9)
// Europe/London - Greenwich Mean Time / British Summer Time
// America/New_York - Eastern Time (UTC-5/UTC-4)
?>
⚠️ تحذير: المنطقة الزمنية الافتراضية في PHP هي UTC. إذا كان موقعك يخدم مستخدمين في منطقة معينة، فاحرص دائمًا على استدعاء
date_default_timezone_set() في بداية البرنامج النصي. فبدون ذلك، قد تظهر الطوابع الزمنية على تعليقات المستخدمين متأخرة بـ 8 ساعات.
5. وصفات التمر في الحياة اليومية
PHP
<?php
// 1. Calculate age
function getAge(string $birthday): int {
$born = new DateTime($birthday);
$today = new DateTime();
return $born->diff($today)->y;
}
echo getAge("2000-01-15"); // 26
// 2. Display relative time ("posted 3 days ago")
function timeAgo(string $datetime): string {
$past = new DateTime($datetime);
$now = new DateTime();
$diff = $past->diff($now);
if ($diff->y > 0) return $diff->y . " year(s) ago";
if ($diff->m > 0) return $diff->m . " month(s) ago";
if ($diff->d > 0) return $diff->d . " day(s) ago";
if ($diff->h > 0) return $diff->h . " hour(s) ago";
if ($diff->i > 0) return $diff->i . " minute(s) ago";
return "just now";
}
// 3. Generate an order number
function generateOrderNo(): string {
return date("YmdHis") . mt_rand(1000, 9999);
}
echo generateOrderNo(); // 202606291430451234
?>
❓ أسئلة شائعة
س
date() أم DateTime — أيهما يجب أن أستخدم؟ج استخدم
date() للتنسيق البسيط المكون من سطر واحد. واستخدم DateTime عندما تحتاج إلى حساب الفروق الزمنية بين التواريخ، أو إجراء عمليات تكرارية على نطاقات زمنية، أو تعديل التواريخ، أو مقارنتها.س لماذا يختلف التوقيت لدي بمقدار 8 ساعات؟
ج بسبب المنطقة الزمنية. استدعِ
date_default_timezone_set("Asia/Shanghai") في البرنامج النصي الخاص بك (أو اضبط date.timezone = Asia/Shanghai في php.ini).س ماذا يُرجع
strtotime("2026/02/29")؟ج لا يوجد يوم 29 فبراير في عام 2026. يقوم
strtotime بالتصحيح التلقائي ويُرجع 2026-03-01. ويتعامل DateTime مع هذا الأمر بنفس الطريقة.📖 ملخص
abs،ceil،floor،round،max،min،pow،sqrtهي الدوال الحسابية الأكثر استخدامًاmt_rand()للحصول على أرقام عشوائية سريعة؛random_int()للحصول على قيم آمنة من الناحية التشفيريةdate("Y-m-d H:i:s")يقوم بتنسيق التاريخ والوقت باستخدام أحرف التنسيقstrtotime()يحول العبارات المكتوبة بلغة بشرية إلى طوابع زمنية- تتولى فئة
DateTimeمعالجة العمليات المعقدة المتعلقة بالتواريخ (حساب الفرق، التعديل، المقارنة) - احرص دائمًا على ضبط المنطقة الزمنية الخاصة بك:
date_default_timezone_set("Asia/Shanghai")
📝 تمارين
- استخدم
date()لعرض الوقت الحالي بثلاثة تنسيقات مختلفة: تنسيق التاريخ وفقًا لمعيار ISO (YYYY-MM-DD)، وتنسيق كامل يسهل قراءته ويشمل يوم الأسبوع، وتنسيق موجز بنظام الـ 24 ساعة. - اكتب دالة
getDaysBetween($date1, $date2)تستخدم الدالةDateTimeلحساب عدد الأيام بين تاريخين. - اكتب دالة
isWeekend($date)تُرجعtrueإذا كان التاريخ المحدد يوافق يوم السبت أو الأحد.



