آموزش برنامه نویسی پی اچ پی قسمت هجدهم
در این جلسه از سری آموزشی پیاچپی قصد داریم در مورد تاریخ و ساعت صحبت کنیم. مطمئنا مواقع زیادی پیش میآید که نیاز به درج ساعت و تاریخ در پیاچپی خواهید داشت و یادگیری توابع مرتبط و نحوه استفاده از آنها بسیار مهم است.
تاریخ همیشه بخش مهمی زندگی روزمره را تشکیل میدهد و باعث میشود بتوانیم به انجام همه کارهای خود برسیم. توابع مربوط به ساعت و تاریخ در پیاچپی بسیار مهم هستند. نیاز به نمایش تاریخ و ساعت هم در مواقع ثبت اطلاعات و هم در مواقع نمایش دادن اطلاعات وجود دارد. پیاچپی ابزارهای بسیار قدرتمندی را به منظور استفاده از تاریخ و ساعت در اختیار توسعهدهندگان میگذارد.
دریافت زمان با ()time
تابع ()time تمام اطلاعات لازم برای لحظه حاضر از تاریخ و ساعت را در اختیار شما قرار خواهد داد. این تابع نیاز به هیچ آرگومان ورودی ندارد اما یک رشته متنی را خروجی میدهد.
رشته متنی که از این تابع برگردانده میشود تعداد ثانیههای سپری شده از نیمه شب ۱ ژانویه ۱۹۷۰ را به وقت GMT نشان میدهد. زمان حاضر به شکل UNIX نمایش مییابد که این یعنی تعداد ثانیههای گذشته شده از یک زمان مرجع.
برای نمایش خروجی این تابع ابتدا نرم افزار Xampp را اجرا کرده و سرورهای آپاچی و MySQL را فعال کنید. حال در پوشه htdocs یک پوشه به اسم time بسازید. در این پوشه فایلی به نام test.php ساخته و کد زیر را در آن قرار دهید.
<?php echo time(); ?>
اجرای کد فوق از طریق آدرس http://127.0.0.1/time/index.php باعث ایجاد نتیجهای مثل عدد ۱۴۶۶۶۶۹۴۱۶ خواهد شد.
فهمیدن این عدد قطعا کار آسانی نیست. اما PHP ابزارهای بسیاری خوبی را برای تبدیل این عدد به فرمتهای قابل فهم و معمول تاریخ و زمان ارائه میدهد.
تابع ()getdate
تابع ()getdate میتواند timstamp (خروجی که از تابع ()time به دست میآید) را به طور اختیاری به عنوان ورودی دریافت کند. خروجی این تابع یک آرایه از اطلاعات مربوط به تاریخ است. اگر شما ورودی این تابع را تعیین نکنید از میزان خروجی کنونی ()time استفاده میکند.
در جدول زیر میتوانید لیست المانهای آرایهای که از تابع getdate بدست میآید را مشاهده کنید.
شماره | کلید و توضیح | مثال |
---|---|---|
۱ |
seconds تعداد ثانیههای گذشته از دقیقه کنونی (۰-۵۹) |
۲۰ |
۲ |
minutes تعداد دقایق گذشته از ساعت کنونی (۰ – ۵۹) |
۲۹ |
۳ |
hours تعداد ساعتهای گذشته از روز کنونی (۰ – ۲۳) |
۲۲ |
۴ |
mday روز ماه کنونی (۱ – ۳۱) |
۱۱ |
۵ |
wday روز هفته کنونی (۰ – ۶) |
۴ |
۶ |
mon ماه سال کنونی (۱ – ۱۲) |
۷ |
۷ |
year سال (۴ رقمی) |
۱۹۹۷ |
۸ |
yday روزکنونی در سال جاری ( ۰ – ۳۶۵ ) |
۱۹ |
۹ |
weekday روز جاری در هفته کنونی |
Thursday |
۱۰ |
month ماه جاری در سال کنونی |
January |
۱۱ |
۰ Timestamp – تایماستامپ |
۹۴۸۳۷۰۰۴۸ |
حال شما میتوانید با استفاده از دادههای فوق کنترل کاملی را بر روی تاریخ و ساعت داشته باشید. شما میتوانید بر اسا فرمت مورد نیاز خود از دادههای بالا استفاده کنید.
به مثال زیر دقت کنید:
<?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 ۰ = ۱۴۶۶۶۶۹۴۱۸ Today's date: 23/6/2016
تبدیل تایماستامپ با تابع ()date
تابع ()date شکل فرمتبندی شدهای از تاریخ و زمان را نشان میدهد. شما میتوانید تعداد بسیار زیادی فرمت بر حسب خلاقیت یا نیاز خود با این تابع بدست آورید. کد استاندارد این تابع به شکل زیر است:
date(format,timestamp)
تابع ()date نیز میتواند تایماستامپ (timestamp) مورد نظرتان را به صورت اختیاری به عنوان ورودی دریافت کند و اگر این ورودی تعیین نشود، از زمان کنونی استفاده خواهد شد. در جدول زیر لیستی از فرمتهایی که میتوانید با این تابع استفاده کنید آورده شده است.
شماره | فرمت و توضیح | مثال |
---|---|---|
۱ |
a ‘am’ یا ‘pm’ با حروف کوچک |
pm |
۲ |
A ‘AM’ یا ‘PM’ با حروف بزرگ |
PM |
۳ |
d روز جاری در ماه کنونی |
۲۰ |
۴ |
D روز هفته جاری (سه کاراکتر) |
Thu |
۵ |
F نام ماه جاری |
January |
۶ |
h ساعت (فرمت ۱۲ ساعته – اعداد تک رقمی با یک صفر پیش از عدد) |
۱۲ |
۷ |
H ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی با یک صفر پیش از عدد) |
۲۲ |
۸ |
g ساعت (فرمت ۱۲ ساعته – اعداد تک رقمی بدون یک صفر پیش از عدد) |
۱۲ |
۹ |
G ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی بدون یک صفر پیش از عدد) |
۲۲ |
۱۰ |
i دقیقه ( ۰ – ۵۹ ) |
۲۳ |
۱۱ |
j روز ماه جاری (اعداد تک رقمی بدون یک صفر پیش از عدد) |
۲۰ |
۱۲ |
l (حرف کوچک ‘L’) روز هفته |
Thursday |
۱۳ |
L کبیسه بودن سال (‘۱’ بله, ‘۰’ خیر) |
۱ |
۱۴ |
m ماه جاری سال کنونی (عدد – اعداد تک رقمی با یک صفر پیش از عدد) |
۱ |
۱۵ |
M ماه جاری سال کنونی (سه کاراکتر) |
Jan |
۱۶ |
r فرمت RFC 2822 |
Thu, 21 Dec 2000 16:01:07 +0200 |
۱۷ |
n ماه جاری سال کنونی (عدد – اعداد تک رقمی بدون یک صفر پیش از عدد) |
۲ |
۱۸ |
s ثانیههای گذشته شده از دقیقه جاری |
۲۰ |
۱۹ |
U تایماستامپ |
۹۴۸۳۷۲۴۴۴ |
۲۰ |
y سال (دو رقم) |
۰۶ |
۲۱ |
Y سال (چهار رقم) |
۲۰۰۶ |
۲۲ |
z روز کنونی سال جاری (۰ – ۳۶۵) |
۲۰۶ |
۲۳ |
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()); ?>
خروجی کد بالا به شکل زیر خواهد بود:
۰۶/۲۳/۱۶ ۸.۱۰:۱۷<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 مراجعه کنید.