در این جلسه از سری آموزشی پیاچپی قصد داریم در مورد تاریخ و ساعت صحبت کنیم. مطمئنا مواقع زیادی پیش میآید که نیاز به درج ساعت و تاریخ در پیاچپی خواهید داشت و یادگیری توابع مرتبط و نحوه استفاده از آنها بسیار مهم است. در ادامه با ما همراه باشید.
تاریخ همیشه بخش مهمی زندگی روزمره را تشکیل میدهد و باعث میشود بتوانیم به انجام همه کارهای خود برسیم. توابع مربوط به ساعت و تاریخ در پیاچپی بسیار مهم هستند. نیاز به نمایش تاریخ و ساعت هم در مواقع ثبت اطلاعات و هم در مواقع نمایش دادن اطلاعات وجود دارد. پیاچپی ابزارهای بسیار قدرتمندی را به منظور استفاده از تاریخ و ساعت در اختیار توسعهدهندگان میگذارد
دریافت زمان با ()time
تابع ()time تمام اطلاعات لازم برای لحظه حاضر از تاریخ و ساعت را در اختیار شما قرار خواهد داد. این تابع نیاز به هیچ آرگومان ورودی ندارد اما یک رشته متنی را خروجی میدهد.
رشته متنی که از این تابع برگردانده میشود تعداد ثانیههای سپری شده از نیمه شب ۱ ژانویه ۱۹۷۰ را به وقت GMT نشان میدهد. زمان حاضر به شکل UNIX نمایش مییابد که این یعنی تعداد ثانیههای گذشته شده از یک زمان مرجع.
برای نمایش خروجی این تابع ابتدا نرم افزار Xampp را اجرا کرده و سرورهای آپاچی و MySQL را فعال کنید. حال در پوشه htdocs یک پوشه به اسم time بسازید. در این پوشه فایلی به نام test.php ساخته و کد زیر را در آن قرار دهید.
<?php
echo time();
?>
اجرای کد فوق از طریق آدرس http://127.0.0.1/time/index.php باعث ایجاد نتیجهای مثل عدد 1466669416 خواهد شد.
فهمیدن این عدد قطعا کار آسانی نیست. اما PHP ابزارهای بسیاری خوبی را برای تبدیل این عدد به فرمتهای قابل فهم و معمول تاریخ و زمان ارائه میدهد.
تابع ()getdate
تابع ()getdate میتواند timstamp (خروجی که از تابع ()time به دست میآید) را به طور اختیاری به عنوان ورودی دریافت کند. خروجی این تابع یک آرایه از اطلاعات مربوط به تاریخ است. اگر شما ورودی این تابع را تعیین نکنید از میزان خروجی کنونی ()time استفاده میکند.
در جدول زیر میتوانید لیست المانهای آرایهای که از تابع getdate بدست میآید را مشاهده کنید.
شماره کلید و توضیح مثال
1
seconds
تعداد ثانیههای گذشته از دقیقه کنونی (0-59)
20
2
minutes
تعداد دقایق گذشته از ساعت کنونی (0 - 59)
29
3
hours
تعداد ساعتهای گذشته از روز کنونی (0 - 23)
22
4
mday
روز ماه کنونی (1 - 31)
11
5
wday
روز هفته کنونی (0 - 6)
4
6
mon
ماه سال کنونی (1 - 12)
7
7
year
سال (4 رقمی)
1997
8
yday
روزکنونی در سال جاری ( 0 - 365 )
19
9
weekday
روز جاری در هفته کنونی
Thursday
10
month
ماه جاری در سال کنونی
January
11
0
Timestamp - تایماستامپ
948370048
حال شما میتوانید با استفاده از دادههای فوق کنترل کاملی را بر روی تاریخ و ساعت داشته باشید. شما میتوانید بر اسا فرمت مورد نیاز خود از دادههای بالا استفاده کنید.
به مثال زیر دقت کنید:
<?php
$date_array = getdate();
foreach ( $date_array as $key => $val ){
print "$key = $val<br />";
}
$formated_date = "Today's date: ";
$formated_date .= $date_array['mday'] . "/";
$formated_date .= $date_array['mon'] . "/";
$formated_date .= $date_array['year'];
print $formated_date;
?>
نتیجه اجرای کد فوق چیزی شبیه به زیر است:
seconds = 18 minutes = 10 hours = 8 mday = 23 wday = 4 mon = 6 year = 2016 yday = 174 weekday = Thursday month = June 0 = 1466669418 Today's date: 23/6/2016
تبدیل تایماستامپ با تابع ()date
تابع ()date شکل فرمتبندی شدهای از تاریخ و زمان را نشان میدهد. شما میتوانید تعداد بسیار زیادی فرمت بر حسب خلاقیت یا نیاز خود با این تابع بدست آورید. کد استاندارد این تابع به شکل زیر است: date(format,timestamp)
تابع ()date نیز میتواند تایماستامپ (timestamp) مورد نظرتان را به صورت اختیاری به عنوان ورودی دریافت کند و اگر این ورودی تعیین نشود، از زمان کنونی استفاده خواهد شد. در جدول زیر لیستی از فرمتهایی که میتوانید با این تابع استفاده کنید آورده شده است.
شماره فرمت و توضیح مثال
1 a
'am' یا 'pm' با حروف کوچک pm
2 A
'AM' یا 'PM' با حروف بزرگ PM
3 d
روز جاری در ماه کنونی 20
4 D
روز هفته جاری (سه کاراکتر) Thu
5 F
نام ماه جاری January
6 h
ساعت (فرمت ۱۲ ساعته - اعداد تک رقمی با یک صفر پیش از عدد) 12
7 H
ساعت (فرمت ۲۴ ساعته - اعداد تک رقمی با یک صفر پیش از عدد) 22
8 g
ساعت (فرمت ۱۲ ساعته - اعداد تک رقمی بدون یک صفر پیش از عدد) 12
9 G
ساعت (فرمت ۲۴ ساعته - اعداد تک رقمی بدون یک صفر پیش از عدد) 22
10 i
دقیقه ( 0 - 59 ) 23
11 j
روز ماه جاری (اعداد تک رقمی بدون یک صفر پیش از عدد) 20
12 l (حرف کوچک 'L')
روز هفته Thursday
13 L
کبیسه بودن سال ('1' بله, '0' خیر) 1
14 m
ماه جاری سال کنونی (عدد - اعداد تک رقمی با یک صفر پیش از عدد) 1
15 M
ماه جاری سال کنونی (سه کاراکتر) Jan
16 r
فرمتRFC 2822
Thu, 21 Dec 2000 16:01:07 +0200
17 n
ماه جاری سال کنونی (عدد - اعداد تک رقمی بدون یک صفر پیش از عدد) 2
18 s
ثانیههای گذشته شده از دقیقه جاری 20
19 u
تایماستامپ 948372444
20 y
سال (دو رقم) 06
21 Y
سال (چهار رقم) 2006
22 z
روز کنونی سال جاری (0 - 365) 206
23 Z
افست ثانیهها ازGMT
به عنوان مثال کد زیر را در یک فایل وارد کرده و آن را اجرا کنید:
<?php
print date("m/d/y G.i:s<br>", time());
print "Today is ";
print date("j of F Y, \a\\t g.i a", time());
?>
خروجی کد بالا به شکل زیر خواهد بود:
06/23/16 8.10:17<bthu, 23="" jun="" 2016="" 08:10:17="" +0000="">Today is 23 2016f June 2016, at 8.10 am
اما تمام آنچه گفته شد فقط برای تاریخهای میلادی بکار میروند و برای استفاده از تاریخ شمسی باید از یک کلاس خارجی استفاده کنید. اینکه کلاس خارجی چیست فعلا نباید مد نظر شما باشد. اگر به خاطر داشته باشید روش include کردن فایلها را در جلسات گذشته مرور کردیم. شما باید فایل مربوط به کلاس تاریخ شمسی را به فایل مورد نظر خود که قصد استفاده از تاریخ شمسی را در آن دارید inlcude کرده و سپس به جای تابع ()date از ()jdate استفاده کنید. تمامی عملکردهای تابع ()jdate دقیقا شبیه به تابع ()date است. ابتدا فایل jdf.php را از این لینک دانلود کنید و سپس فایل jdf.php را در کنار فایل مورد نظر خود به عنوان مثال در پوشه time که در پوشه htdocs ساخته بودید قرار دهید. سپس در فایلی که قصد استفاده از تاریخ هجری شمسی را در آن دارید فایل jdf.php را include کنید. به عنوان مثال به کد زیر دقت کنید:
<?php
include ("jdf.php");
print jdate("j of F Y, \a\\t g.i a", time());
?>
در کد بالا ما فقط date را به jdate تغییر دادیم. در این صورت نتیجه اجرای کد فوق چیزی شبیه به زیر خواهد بود:
۳ ۱۳۹۵ تابستان تیر ۱۳۹۵, at ۱.۵۴ ب.ظ
همانطور که میبینید فرمتی که برای نمایش تاریخ میلادی بود را بدون تغییر برای تاریخ هجری شمسی استفاده کردیم که زیاد جالب نیست. میتوان از فرمتی مثل زیر استفاده کرد. کد بالا را به شکل زیر تغییر دهید:
<?php
include ("jdf.php");
print jdate("j F Y - h:s", time());
?>
نتیجه کد بالا به شکل زیر خواهد بود:
۳ تیر ۱۳۹۵ - ۰۱:۲۸
قطعا فرمت بالا نسبت به فرمت قبلی برای کاربران فارسی زبان گویاتر است. لازم به ذکر است که در فایلی که در بالا لینک دانلود آن را قرار دادیم، راهنمای کامل تابع jdate نیز وجود دارد که از سایت رسمی سازنده آن منتشر شده و برای یادگیری عمیقتر این توابع jdf.php میتوانید به راهنمای موجود در فایل دانلود شده یا وبسایت http://jdf.scr.ir مراجعه کنید. در جلسات بعدی با مباحث پیشرفتهتر و جزئیتر دیگری در پیاچپی آشنا خواهید شد.