بسم الله الرحمن الرحيم والصلاة والسلام على اشرف الانبياء والمرسلين ، في هذا  الدرس  احببت أن اجيب على تسآول كثيراً ما يطرح في المنتديات وهو عن التاريخ  باللغة  العربية ، واتمنى من الله التوفيق في طرح الموضوع بشكل مبسط وفي متناول الجميع .. 
 
في البداية وكمقدمة للموضوع أود الإشارة الا أن الطريقة المشروحة في هذا  الدرس  تعتمد على التاريخ الميلادي ، وبالتاكيد يمكن استخدامها مع التاريخ الهجري ولكن تحتاج الى تعديل وحسابات خاصة ، وباذن الله سيتم شرحها في المستقبل . 
 
دالة التاريخ في البي اتش بي هي Date ، ولها معاملين ( أي قيمتين لاعداد مخرجات الدالة ) ، احد المعاملين اجباري والثاني اختياري ، اما الاول وهو الاهم تعتمد عليه مخرجات التاريخ بشكل اساسي مثل ضبط السنة بخانتين أو ضبط الشهر باسم الشهر .. وغيرها ، اما المعامل الثاني فهو ما يسمى بـ ( UNIX time stamp) وهو خاص بنظام اليونكس وكيفية تخزين التاريخ فيه ، عموماً ما يهمنا هنا هو المعامل الأول وهو ما يسمى بـ ( Format String ) ، وكمثال على ما ذكرنا :
 
<? 
$today = date(Y-m-d); 
echo $today; 
?>
 
هذا المثال سيقوم بطباعة تاريخ اليوم على الشكل التالي 2002-03-13 ، ولاهمية الرموز التي يمكن استخدامها مع الـ Date ساذكر اهمها : 
d رقم اليوم في الشهر على شكل خانتين من 01 الى 31 . 
D اسم اليوم في الاسبوع على شكل 3 خانات مثل Mon أي الاثنين . 
g رقم الساعة في اليوم من 1 الى 12 . 
j رقم اليوم في الشهر من 1 الى 31 بدون وضع الصفر . 
m رقم الشهر في السنة على شكل خانتين من 01 الى 12 . 
y رقم السنة على شكل خانتين ، مثلا 02 . 
Y رقم السنة على شكل اربع خانات ، ومثالها 2002 . 
 
هذه من اهم الرموز لكي تتضح الصورة فقط ، ولعلنا نتطرق لها بشكل اوسع قريباً .
 
 
 
لتحويل التاريخ الى اللغة العربية نحتاج أن ننشئ جدولاً في قاعدة البيانات ، فلذلك قم بنسخ الكود التالي والصقه في خانة Run SQL query في الـ PHPMyadmin أو بأي طريقة اخرى تراها ، الاهم انشاء الجدول .
 
CREATE TABLE month_name ( 
id tinyint(4) NOT NULL default '0', 
month text NOT NULL 
) TYPE=MyISAM; 
 
INSERT INTO month_name VALUES (1, 'يناير'); 
INSERT INTO month_name VALUES (2, 'فبراير'); 
INSERT INTO month_name VALUES (3, 'مارس'); 
INSERT INTO month_name VALUES (4, 'ابريل'); 
INSERT INTO month_name VALUES (5, 'مايو'); 
INSERT INTO month_name VALUES (6, 'يونيو'); 
INSERT INTO month_name VALUES (7, 'يوليو'); 
INSERT INTO month_name VALUES (8, 'اغسطس'); 
INSERT INTO month_name VALUES (9, 'سبتمبر'); 
INSERT INTO month_name VALUES (10, 'اكتوبر'); 
INSERT INTO month_name VALUES (11, 'نوفمبر'); 
INSERT INTO month_name VALUES (12, 'ديسمبر');
 
بعد انشاء هذا الجدول يجب أن يكون لديك جدول اخر يحتوي على التاريخ المراد تحوليه ، ولنفترض أن لديك الجدول ( news ) يحتوي على الحقول ( title , date ) ويحتوي على البيانات التالية : 
date title 
2002-04-20 الخبر الأول 
2002-04-25 الخبر الثاني 
2002-05-01 الخبر الثالث
 
قم بانشاء الجدول :
 
CREATE TABLE news (
 
title text NOT NULL,
 
date date NOT NULL default '0000-00-00'
 
) TYPE=MyISAM;
 
 
 
 
 
INSERT INTO news VALUES ('الخبر الأول','2002-04-20');
 
INSERT INTO news VALUES ('الخبر الثاني','2002-04-25');
 
INSERT INTO news VALUES ('الخبر الثالث','2002-05-01');
 
 
 
بقي أن نقوم بتحويل التاريخ الى العربية ، وادراجه في صفحة PHP ، ولعمل ذلك سنقوم باستخدام دالة تسمى Date_Format من خلال طلب لقاعدة البيانات ، نحدد من خلاله طريقة جلب البيانات ووضعها بالصورة المطلوبة . 
 
بقي أن نذكر أننا سوف نضطر الى كتابة طلبين لقاعدة البيانات احدهما لجلب حقول العنوان ( title ) والاخر لجلب حقول التاريخ ( date ) كما يلي :
 
<? 
$result = mysql_query("select * from news"); 
$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d'),\" 
\",month_name.month,\" \",DATE_FORMAT(date,'%Y')) 
AS date FROM news ,month_name 
WHERE month_name.id = month(date)"; 
$result2 = mysql_query("$sql"); 
while ($row=mysql_fetch_array($result) 
and $row2=mysql_fetch_array($result2)) 
{ 
$title = $row["title"]; 
$date = $row2["date"]; 
echo "$title , $date<br>"; 
} 
?>
 
عند تنفيذ السكربت ، سترى ما يلي : 
الخبر الأول , 20 ابريل 2002 
الخبر الثاني , 25 ابريل 2002 
الخبر الثالث , 01 مايو 2002
 
 
 
في حالات كثيرة تكون كتابة السكربت السابق بهذا الشكل مسببه للكثير من المشاكل ، و خاصة عند طلب ترتيب للجدول على حسب حقل معين ، وهذه المشاكل هي في توافق البيانات مع بعضها البعض ، فلو افترضنا في مثالنا السابق أن الخبر الأول الذي يحمل التاريخ 2002-04-20 كان باسم آخر ، مثلا ( العنوان الأول ) ، وبعد اضافة حقول ترتيب لجلب البيانات كالتالي :
 
<? 
$result = mysql_query("select * from news 
order by title"); 
$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d'),\" 
\",month_name.month,\" \",DATE_FORMAT(date,'%Y')) 
AS date FROM news ,month_name 
WHERE month_name.id = month(date)"; 
$result2 = mysql_query("$sql"); 
while ($row=mysql_fetch_array($result) 
and $row2=mysql_fetch_array($result2)) 
{ 
$title = $row["title"]; 
$date = $row2["date"]; 
echo "$title , $date<br>"; 
} 
?>
 
ستجد أن النتائج هي : 
الخبر الثالث , 20 ابريل 2002 
الخبر الثاني , 25 ابريل 2002 
العنوان الأول , 01 مايو 2002 وهذا بطبيعة الحال مشكلة في توافق البيانات . 
 
ولحلها يجب أن نوافق بين الطلبين لقاعدة البيانات ، بمعنى أنه اذا رتبنا الطلب الاول حسب ( title ) يجب أن نفعل ذلك مع الطلب الثاني بتعديله ليصبح :
 
<? 
$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d'),\" 
\",month_name.month,\" \",DATE_FORMAT(date,'%Y')) 
AS date FROM news ,month_name 
WHERE month_name.id = month(date) 
order by title"; 
?>
 
وبالتالي تصبح البيانات المخرجه كالتالي : 
الخبر الثالث , 01 مايو 2002 
الخبر الثاني , 25 ابريل 2002 
العنوان الأول , 20 ابريل 2002 
 
وهي بالتاكيد صحيحة .
 منقوووول للافادة  
hg]vs hgsh]s uav(hgjhvdo fhggym hguvfdm)