السلام عليكم ورحمة الله وبركاته
هذا الدرس ضمن سلسة دروس الدورة التالية لتعلم لغة php !
التعامل مع الوقت و التاريخ في php :
ان للوقت و التاريخ اهمية كبيرة جدا ً و خصوصا ً في عالم الويب (تاريخ إضافة مقال , تعليق أو آخر تحديث للموقع ..الخ) , وبالتاكيد تُوفر لغة php امكانية الحصول على الوقت والتاريخ .
و للحصول على الوقت أو التاريخ في php نستخدم الدالة date التي تُعيد الوقت أو التاريخ على شكل سلسلة نصية string حسب التنسيق المُمرر اليها :
date($format, $timestamp);
الوسيط الاول المُمرر اليها هو عبارة عن نص يحوي التنسيق المُراد اظهار التاريخ أو الوقت به , أما الثاني هو وسيط اختياري الذي يمثل بصمة الوقت (سيتم التطرق الى بصمات الوقت لاحقا ً).
جدول التنسيقات التي يمكن استخدامها مع دوال الوقت والتاريخ في php :
* الحرف d يُعيد رقم اليوم من الشهر , وتتراوح قيمته بين 01 - 31 , وللحصول على رقم اليوم بدون اصفار استخدم التنسيق j.
* الحرف m يُعيد رقم الشهر , وتتراوح قيمته بين 01 - 12 , وللحصول على رقم الشهر بدون اصفار استخدم التنسيق n.
* الحرف w يُستخدم للحصول على رقم اليوم من الاسبوع , وتتراوح قيمته بين 0 (الاحد) و 6 (السبت)
* الحرف h يُستخدم للحصول على الساعة الحالية لكن بنظام 12 ساعة .
* الحرف H يُستخدم للحصول على الساعة الحالية لكن بنظام 24 ساعة .
* الحرف i يُعيد الدقائق الحالية .
* الحرف s يُعيد الثواني الحالية .
* الحرف Y يُعيد رقم السنة الحالية بشكل اربعة ارقام .
** لا تشغل نفسك في حفظ الجدول السابق لان php.net مازال موجودا ً :)
مثال :
<?phpecho date('H : i : s');?>يقوم المثال السابق بإظهار الوقت الحالي على الشكل 09 : 04 : 11 .
مثال اخر :
<?phpecho date('Y / m / d');?>يُعيد المثال السابق التاريخ الحالي على الشكل YYYY / MM / DD .
طريقة طباعة التاريخ باللغة العربية :
كما ذكرنا سابقا يلزم ذكر الوقت والتاريخ عند كتابة المقالات او التعليقات , ولاظهار التاريخ باللغة العربية سنستخدم عدة دوال :
الدالة الاولى تحويل رقم الشهر الى اسمه : أي عندما يكون الشهر الخامس مثلا يكون اسمه أيار أو مايو , وتكون على الشكل التالي :
<?php
header('Content-Type: text/html; charset=UTF-8');
function month_name()
{
$monthes = array(
1 => 'كانون الثاني',
2 => 'شباط',
3 => 'اذار',
4 => 'نيسان',
5 => 'أيار',
6 => 'حزيران',
7 => 'تموز',
8 => 'اب',
9 => 'أيلول',
10 => 'تشرين الأول',
11 => 'تشرين الثاني',
12 => 'كانون الاول'
);
return $monthes[date('n')];
}
echo month_name();
?>حيث انشئنا مصفوفة كل مفتاح أو مُعرف كل عنصر مرتبط مع اسم الشهر و باستخدام التنسيق n حصلنا على رقم الشهر .
الدالة الثانية اظهار اسماء ايام الاسبوع : اي على الشكل (الجمعة , السبت ...) :
<?php
header('Content-Type: text/html; charset=UTF-8');
function day_name()
{
$days = array('الاحد', 'الاثنين', 'الثلاثاء', 'الاربعاء', 'الخميس', 'الجمعة', 'السبت');
return $days[date('w')];
}
echo day_name();
?>الان لنجمع الاكواد مع بعضها :
<?php
header('Content-Type: text/html; charset=UTF-8');
printf('%s - %s - %d:%d %d', day_name(), month_name(), date('H'), date('i'), date('Y'));
function month_name()
{
$monthes = array(
1 => 'كانون الثاني',
2 => 'شباط',
3 => 'اذار',
4 => 'نيسان',
5 => 'ايار',
6 => 'حزيران',
7 => 'تموز',
8 => 'اب',
9 => 'ايلول',
10 => 'تشرين الأول',
11 => 'تشرين الثاني',
12 => 'كانون الاول'
);
return $monthes[date('n')];
}
function day_name()
{
$days = array('الاحد', 'الاثنين', 'الثلاثاء', 'الاربعاء', 'الخميس', 'الجمعة', 'السبت');
return $days[date('w')];
}
?>المثال السابق سيطبع الوقت بالطريقة التالية : الجمعة - كانون الثاني - 16:23 2013 .
بصمة الوقت لنظام اليونكس (The unix timestamp) :
باختصار هو عدد الثواني منذ منتصف ليلة رأس السنة عام 1970 , ولتوليد هذه البصمة استخدم الدالة time التي تُعيد الوقت الحالي , أما اذا اردت ان تحصل على بصمة الوقت لأي تاريخ تريد استخدم الدالة mktime حسب الشكل التالي :
mktime($hour, $minute, $second, $month, $day, $year);
امثلة عن استخدام الدالتين السابقتين :
<?php
echo date("m-d-Y H:i", time());
echo '<br>';
echo date("m-d-Y H:i", mktime(14, 23, 11, 11, 6, 2009));
?>الدالة getdate : تُعيد هذه الدالة التاريخ والوقت على شكل مصفوفة , وتقبل وسيطا واحدا ً اختياريا ً هو بصمة الوقت :
<?php
$timestamp = mktime(14, 23, 11, 11, 6, 2009);
$date = getdate($timestamp);
print_r($date);
/*
Array
(
[seconds] => 11
[minutes] => 23
[hours] => 14
[mday] => 6
[wday] => 5
[mon] => 11
[year] => 2009
[yday] => 309
[weekday] => Friday
[month] => November
[0] => 1257513791
)
*/
?>الحصول على الوقت بتوقيت غرينتش : كما لاحظت سابقا , إن لغة php تقوم بحساب الوقت والتاريخ وفق وقت وتاريخ السيرفر المُستضيف , أي بمعنى آخر عندما تستخدم الدالة date في برنامج مُستضاف على سيرفر في السعودية فإن النتائج تختلف عن استخدام نفس الدالة وفي نفس الوقت على سيرفر موجود في المغرب مثلا , ولهذا يُفضل الحصول على الوقت بتوقيت غرينتش ومن ثم تحويلها الى المنطقة المطلوبة :
<?phpecho gmdate("m-d-Y H:i", time() + 2 * 3600);?>لقد اضفنا في المثال السابق ساعتين من الزمن للحصول على الوقت في سوريا مثلا على اي سيرفر تم اعداد الوقت والتاريخ فيه بشكل صحيح .
الدالة microtime : تُعيد الدالة السابقة بصمة الوقت الحالية لكنها مقدرة بالملي ثانية ولا تقبل هذه الدالة أي وسائط .
حساب العمر عن طريق تاريخ الميلاد : في بعض الأحيان يُطلب من المستخدم ان يُدخل تاريخ ميلاده عند التسجيل في الموقع , ولحساب عمر المستخدم , يوجد عدد من الطرق اسهلها - لكنها غير دقيقة - هي انقاص بصمة وقت ميلاد المستخدم (عن طريق استخدام الدالة mktime التي سبق شرحها) من بصمة الوقت الحالية , ومن ثم توليد رقم السنة عن طريق الدالة date التي يمرر لها التنسيق Y ومن ثم انقاص 1970 (لان بصمة الوقت تبدأ من عام 1970) من الناتج كما يلي :
<?php
$time = time() - mktime(0, 0, 0, 5, 21, 1995);
echo date("Y", $time) - 1970;
?>أو يمكن قسمة فرق الوقت على (60 * 60 * 24 * 365) اي سنة كاملة مقدرة بالثواني :
<?php $time = time() - mktime(0, 0, 0, 5, 21, 1995); echo floor($time / (60 * 60 * 24 * 365)); //echo floor(time() - mktime(0, 0, 0, 5, 21, 1995) / (31536000)); ?>
تم استخدام الدالة floor لتقريب الرقم الى اقرب قيمة دنيا .
