php mysql : التعامل مع  التاريخ و الوقت

sql دوال التاريخ و الوقت

آخر تحيين: 10-01-2015

php MySQL إنشاء مُدوّنة sql حقول التاريخ و الوقت


للتعامل مع حقول التاريخ (DATE,DATETIME,TIMESTAMP,YEAR) ، نستعمل دوال SQL الجاهزة . و تُتيح لنا القيام بأغلب العمليات التي تمرّ بمخيلتكم . على كل حال فهي دوال سهلة الإستعمال ، يجب فقط أن تتذكّروا بأنها مرتبطة بشكل وثيق بنوع حقل التاريخ في الجدول .
سنتعرف عن كثب على الدّالتين الأكثر استعمالا : NOW() و DATE_FORMAT() ، عبر مثال تطبيقي . ثم سأعرض عليكم أهم الدّوال الأخرى .
كنا قد أنشأنا سابقا حقلاً من نوع DATETIME أسميناه date_creation في جدول "chat" .
سنأخذ هذا الحقل كمثال ، ثم سنرى كيف نُخزّن التاريخ و نتعرّف على طرق عرضه

sql NOW()

تُعطينا الدّالة NOW التاريخ و الوقت الحالي على شكل 2014-03-16 21:45:17 . و هذا الشكل يوافق تماما نوع DATETIME الذي اخترناه لحقلنا .
لإضافة تاريخ الرّدود في مثالنا ، سيكون استعلامنا كالتالي :

INSERT INTO chat(author, content, date_creation) VALUES('omar', 'blabla...', NOW())

لنُوظّف هذا الإستعلام في مثال تطبيقي . لهذا في صفحة chat.php سنظيف تاريخنا أثناء إضافة الرّد .

$author = $_POST['author'];
$content = $_POST['content'];

$query= $db->prepare('INSERT INTO chat 
                     (author, content, date_creation) VALUES
                     (:auth,:cont,NOW())
                    ');
  $query->bindValue(':auth',$author,PDO::PARAM_STR);
  $query->bindValue(':cont',$content,PDO::PARAM_STR);
  $query->execute();
  $query->CloseCursor();

إذا قمتم بإضافة رد ، سيُخزن تاريخه أيضا بالساعة و الدقيقة و الثانية . لعرضه ، لدينا طريقتان : إمّا نعرضه كما هو تماماً في الحقل ، أي على هذا الشّكل "2014-03-16 21:45:17" . و ليس هناك أسهل منه ، إذ نقوم بعرض متغير التاريخ كباقي المتغيرات :

echo $chat['date_creation'];

إذا أردنا تغيير نمط العرض ، و هذا ما نودّه غالبا . مثلا لعرض تاريخنا على هذا الشكل 16 March 2014 . سنلجأ إلى دالة DATE_FORMAT()

sql DATE_FORMAT()

تقوم الدّالة DATE_FORMAT بتهييء حقل التاريخ ، لنتمكّن من عرضه كيفما نشاء .
الشكل العام لاستخدام الدّالة :

DATE_FORMAT(date, format)

القيمة date تمثل حقل التاريخ ، و format تُتيح لنا اختيار طريقة عرض التاريخ .
سنستعمل نفس الرّموز التي رأيناها في درس سابق ، لتمثيل السنة و الشهر و اليوم ...إلخ . لكن هذه المرّة يجب إضافة علامة "%" قبل هذه الحروف . إذا أخذنا مثال جدولنا . لتهييء حقل date_creation ، ثم اختيار التاريخ فقط مع تغيير طريقة العرض ستكون الشيفرة شبيهة بالتالي :

DATE_FORMAT(date_creation, "%d/%m/%Y")
  • d = اليوم
  • m = الشهر
  • Y = السنة

لنرى هذا في مثال تطبيقي ، ثم سأعرض عليكم مجموعة من الرّموز التي يمكننا استخدامها لتغيير نمط العرض :

$response=$db->prepare('SELECT author,content,DATE_FORMAT(date_creation, "%d/%m/%Y") AS mydate 
          FROM chat 
          ORDER BY id
        ');
$response->execute();
$chats = $response->fetchAll();
$response->CloseCursor();
foreach($chats as $chat) 
{
   echo $chat['mydate'];
}

إليكم قائمة لبعض رموز التاريخ و الوقت ، التي يمكنكم استعمالها مع DATE_FORMAT

رموز DATE_FORMAT
الرّمزالتّعريفطريقة العرض
%Yالسنة "بأربعة أرقام"2014
%yالسنة "برقمين"14
%Mإسم الشهر بالإنجليزيةJanuary, February, March, ...
%mالشهر بالأرقاممن "00" إلى "12"
%dيوم من الشهر بالأرقاممن "00" إلى "31"
%Hالساعة بالأرقاممن "00" إلى "23"
%hالساعة بالأرقاممن "01" إلى "12"
%iالدّقائق بالأرقاممن "00" إلى "59"
%s أو %Sالثواني بالأرقاممن "00" إلى "59"

sql بعض دوال التاريخ و الوقت

و أخيراً ، كما وعدتكم ، إليكم هذا الجدول لأهم دوال الوقت و التاريخ

MySql دوال التاريخ و الوقت
الدّالةالتعريفمثال
NOW()تعطينا التّاريخ و الوقت الحالي2014-03-12 21:45:17
CURDATE()تعطينا التاريخ الحالي2014-03-12
CURTIME()تعطينا الوقت الحالي21:45:17
DATE()تجتثّ جزءاً من التاريخ date أو من التاريخ و الوقت "2014-03-12 21:45:17"2014-03-12
EXTRACT()إرجاع جزء واحد من تاريخ/وقت "2014-03-12 21:45:17" مثل(السنة ، الشهر ، اليوم ، الساعة ... إلخ)
السنةالشهراليوم
20140312
DATEADD()إضافة حيّز زمني مُحدّد إلى تاريخ/وقت : "2014-03-12 "إضافة 20 يوما = 2014-04-01
DATE_SUB()حذف حيّز زمني مُحدّد من تاريخ/وقت : "2014-03-12 "حذف 20 يوما = 2014-02-21
DATEDIFF()تعطينا فارق عدد الأيام بين تاريخينتاريخ1 = "2014-03-12" . تاريخ2 = "2014-02-21 "
الفارق = 20
DATE_FORMAT()تُستعمل لتغيير نمط عرض مُكوّنات التاريخ و الوقت .Mar 12 2014 21:45 PM
12-03-2014
12 Mar 14
12 Mar 2014 21:45:17:225