تنسيق التاريخ في PHP نص تمثل فيه الحروف أجزاء التاريخ: تطبع date('Y-m-d H:i:s') شيئًا مثل 2026-03-14 09:05:07. Y السنة بأربعة أرقام، وm الشهر، وd اليوم، وH الساعة (نظام 24 ساعة)، وi الدقائق، وs الثواني؛ وأي محرف ليس حرف تنسيق، مثل - أو / أو :، يُطبع كما هو. وتعمل نصوص التنسيق نفسها في date() وفي DateTimeImmutable::format().
غيّر $format واضغط Run. التاريخ مثبّت على السبت 14 مارس 2026 الساعة 09:05:07، لترى بالضبط ما يفعله كل حرف:
المخرجات:
Sat, 14 Mar 2026 09:05
2026-03-14
14/03/2026
Saturday, March 14th, 2026
9:05 AM
تنسّق date($format) اللحظة الحالية وتنسّق date($format, $timestamp) طابعًا زمنيًا؛ وتنسّق $date->format($format) كائن تاريخ. وكل ما عدا ذلك عن التواريخ، من strtotime() إلى المناطق الزمنية، موجود في صفحة date() في PHP.
محارف تنسيق التاريخ
كل مثال أدناه هو النتيجة لـ 2026-03-14 09:05:07.123456 بتوقيت UTC.
اليوم
| المحرف | المعنى | مثال |
|---|---|---|
d | يوم الشهر، رقمان بصفر بادئ (01 إلى 31) | 14 |
j | يوم الشهر دون صفر بادئ (1 إلى 31) | 14 |
D | اسم اليوم المختصر، 3 حروف | Sat |
l (L صغيرة) | اسم اليوم الكامل | Saturday |
N | يوم الأسبوع حسب ISO، من 1 (الاثنين) إلى 7 (الأحد) | 6 |
w | يوم الأسبوع، من 0 (الأحد) إلى 6 (السبت) | 6 |
S | اللاحقة الإنجليزية لليوم: st أو nd أو rd أو th. استخدمها بعد j | th |
z | يوم السنة، بدءًا من 0 | 72 |
الأسبوع والشهر
| المحرف | المعنى | مثال |
|---|---|---|
W | رقم الأسبوع حسب ISO 8601 (تبدأ الأسابيع يوم الاثنين) | 11 |
F | اسم الشهر الكامل | March |
M | اسم الشهر المختصر، 3 حروف | Mar |
m | رقم الشهر بصفر بادئ (01 إلى 12) | 03 |
n | رقم الشهر دون صفر بادئ (1 إلى 12) | 3 |
t | عدد أيام الشهر | 31 |
السنة
| المحرف | المعنى | مثال |
|---|---|---|
Y | السنة الكاملة، 4 أرقام على الأقل | 2026 |
y | السنة، رقمان | 26 |
L | 1 إذا كانت السنة كبيسة، وإلا 0 | 0 |
o | سنة ترقيم الأسابيع حسب ISO 8601 (استخدمها مع W) | 2026 |
X | السنة الكاملة الموسعة مع إشارة (PHP 8.2 وما بعدها) | +2026 |
x | السنة الكاملة الموسعة، مع الإشارة عند الحاجة فقط (PHP 8.2 وما بعدها) | 2026 |
الوقت
| المحرف | المعنى | مثال |
|---|---|---|
H | الساعة، نظام 24 ساعة، بصفر بادئ (00 إلى 23) | 09 |
G | الساعة، نظام 24 ساعة، دون صفر بادئ (0 إلى 23) | 9 |
h | الساعة، نظام 12 ساعة، بصفر بادئ (01 إلى 12) | 09 |
g | الساعة، نظام 12 ساعة، دون صفر بادئ (1 إلى 12) | 9 |
i | الدقائق بصفر بادئ (00 إلى 59) | 05 |
s | الثواني بصفر بادئ (00 إلى 59) | 07 |
a | am أو pm | am |
A | AM أو PM | AM |
v | أجزاء الألف من الثانية | 123 |
u | أجزاء المليون من الثانية (دائمًا 000000 في date()، التي تأخذ ثواني كاملة) | 123456 |
B | توقيت Swatch للإنترنت (000 إلى 999) | 420 |
المنطقة الزمنية
| المحرف | المعنى | مثال |
|---|---|---|
e | معرّف المنطقة الزمنية | UTC |
T | اختصار المنطقة الزمنية | UTC |
P | الفرق عن UTC مع نقطتين | +00:00 |
p | مثل P، لكن Z لتوقيت UTC | Z |
O | الفرق عن UTC دون نقطتين | +0000 |
Z | الفرق بالثواني | 0 |
I (i كبيرة) | 1 أثناء التوقيت الصيفي، وإلا 0 | 0 |
التاريخ والوقت الكاملان
| المحرف | المعنى | مثال |
|---|---|---|
c | التاريخ والوقت حسب ISO 8601 | 2026-03-14T09:05:07+00:00 |
r | تاريخ RFC 2822، المستخدم في ترويسات البريد الإلكتروني | Sat, 14 Mar 2026 09:05:07 +0000 |
U | الطابع الزمني Unix (الثواني منذ 1970-01-01 بتوقيت UTC) | 1773479107 |
الجدول نفسه، حيًا: تطبع هذه الكتلة كل محرف لتاريخ تختاره. ضع تاريخ ميلادك، أو تاريخًا بعد الظهر، أو تاريخًا في نهاية سنة كبيسة:
طباعة حروف وكلمات داخل التنسيق
يُقرأ أي حرف في نص التنسيق على أنه محرف تنسيق، لذا لا تطبع 'Today is l' العبارة "Today is": فـ T وo وd وa وy وi وs كلها محارف تنسيق. ضع شرطة مائلة عكسية قبل كل حرف تريد طباعته كما هو. وفي نص بين علامتي تنصيص مزدوجتين، \t محرف جدولة أصلًا، لذا استخدم علامتي التنصيص المفردتين للتنسيقات التي فيها شرطات مائلة عكسية:
المخرجات:
UTC202614am26 0507 Saturday
Today is Saturday
Saturday the 14th of March
2026-03-14T09:05:07
Saturday 09UTC 14th
تنسيقات التاريخ الشائعة
لا تحتاج معظم الشيفرات إلا إلى عدد قليل من التنسيقات. تطبعها هذه الكتلة جدول HTML، فتظهر في تبويب Page:
خزّن التواريخ وقارنها بصيغة Y-m-d أو Y-m-d H:i:s: النصوص بهذا الترتيب تُرتَّب كما تُرتَّب التواريخ، وهذا ما لا تفعله نصوص d/m/Y.
ISO 8601 وDATE_ATOM والتنسيقات القياسية الأخرى
لدى PHP ثوابت للتنسيقات التي تتوقعها الواجهات البرمجية والخلاصات وملفات تعريف الارتباط. DATE_ATOM (وأيضًا DateTimeInterface::ATOM) هو ISO 8601 وRFC 3339، التنسيق الذي تستخدمه واجهات JSON البرمجية:
المخرجات:
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07.000+00:00
Sat, 14 Mar 2026 09:05:07 +0000
Sat, 14 Mar 2026 09:05:07 +0000
Saturday, 14-Mar-2026 09:05:07 UTC
Y-m-d\TH:i:sP
يوجد أيضًا الثابت DATE_ISO8601، لكن ليس في فرق توقيته نقطتان (+0000)، وهذا ما لا يسمح به ISO 8601 بهذا الشكل؛ استخدم DATE_ATOM.
تنسيق التاريخ الياباني (Y年m月d日)
المحارف التي ليست حروف تنسيق تُطبع كما هي، ويشمل ذلك حروف الكانجي، لذا تعمل 'Y年n月j日' كما كُتبت. يحذف n وj الصفر البادئ (3月14日)، ويُبقيه m وd (03月14日). واسم اليوم هو الجزء الوحيد الذي لا تستطيع date() ترجمته، لأنها لا تعرف إلا الأسماء الإنجليزية؛ اربط رقم w بقائمتك الخاصة بدلًا من ذلك:
المخرجات:
2026年3月14日
2026年03月14日 09時05分
2026年3月14日(土)
2026/03/14
للتعريب الكامل، بما فيه أسماء الأشهر بلغات أخرى والعصر الياباني (令和)، تنسّق IntlDateFormatter من امتداد intl بأنماط الإعدادات المحلية. وتستخدم حروف أنماط ICU (yyyy وMM وEEEE)، لا محارف PHP المذكورة في هذه الصفحة:
<?php
$formatter = new IntlDateFormatter('ja_JP', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Asia/Tokyo');
echo $formatter->format(new DateTimeImmutable('2026-03-14')); // 2026年3月14日土曜日
$era = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL);
echo $era->format(new DateTimeImmutable('2026-03-14')); // 令和8年3月14日
تحويل تاريخ من تنسيق إلى آخر
لتحويل 14/03/2026 إلى 2026-03-14، حلّل النص بالتنسيق المكتوب به، باستخدام DateTimeImmutable::createFromFormat()، ثم نسّقه من جديد. وتستخدم المحارف نفسها التي في الجدول. ابدأ التنسيق بـ !، وإلا مُلئت الحقول التي لم تعطها (الوقت، هنا) من اللحظة الحالية:
المخرجات:
2026-03-14 00:00:00
March 14, 2026
bool(false)
2026-03-03
Array
(
[10] => The parsed date was invalid
)
للتواريخ التي يكتبها المستخدمون، عامل أي تحذير من getLastErrors() على أنه تاريخ غير صالح، كما تعامل false.
أخطاء شائعة مع تنسيقات التاريخ
ثلاثة أخطاء تتكرر كثيرًا: m حيث قُصد i، وY مقابل y، وترك strtotime() تخمّن ترتيب اليوم والشهر. تقرأ strtotime() الشرطات المائلة بالترتيب الأمريكي شهر/يوم والشرطات أو النقاط بترتيب يوم ثم شهر، فتعطي الأرقام نفسها تاريخين مختلفين:
المخرجات:
09:03:07
09:05:07
14/03/26
2026-03-04
2026-04-03
bool(false)
عندما تعرف تنسيق المُدخل، صرّح به بـ createFromFormat() بدل ترك strtotime() تخمّن.
الأسئلة الشائعة
ماذا تعني date('Y-m-d') في PHP؟
يُستبدل كل حرف بجزء من التاريخ: Y السنة بأربعة أرقام، وm الشهر بصفر بادئ، وd اليوم بصفر بادئ، وتُطبع الشرطات كما هي. في 14 مارس 2026 تعيد 2026-03-14.
كيف أحوّل تاريخًا من تنسيق إلى آخر في PHP؟
حلّله بالتنسيق الذي هو عليه، ثم نسّقه بالذي تريده: تعيد DateTimeImmutable::createFromFormat('!d/m/Y', '14/03/2026')->format('Y-m-d') القيمة 2026-03-14. وتعيد createFromFormat() القيمة false عندما لا يطابق النص، فافحص ذلك أولًا.
ما الفرق بين m وi في تنسيق التاريخ في PHP؟
m هو الشهر (01 إلى 12) وi هي الدقائق (00 إلى 59). وكتابة 'H:m' بدل 'H:i' خطأ شائع: يعرض الوقت رقم الشهر حيث يجب أن تكون الدقائق.
كيف أنسّق تاريخًا بصيغة ISO 8601 في PHP؟
استخدم المحرف c أو الثابت DATE_ATOM: تعيد $date->format(DATE_ATOM) القيمة 2026-03-14T09:05:07+00:00. تجنّب DATE_ISO8601: ليس في فرق توقيته نقطتان (+0000)، وهذا ليس ISO 8601 صالحًا.
كيف أعرض يوم الأسبوع باليابانية باستخدام date() في PHP؟
لا تطبع date() إلا الأسماء الإنجليزية، لذا اربط رقم w (0 للأحد حتى 6 للسبت) بقائمتك الخاصة: ['日','月','火','水','木','金','土'][$date->format('w')]. ومع امتداد intl، تستطيع IntlDateFormatter تنسيق تواريخ كاملة بأي إعدادات محلية.